FIX: Incorrect search blurb when advanced search filters are used.

This commit is contained in:
Guo Xiang Tan
2020-07-08 11:59:49 +08:00
parent 26dc981285
commit 2e1eafae06
3 changed files with 27 additions and 10 deletions

View File

@@ -187,7 +187,7 @@ class Search
@results = GroupedSearchResults.new( @results = GroupedSearchResults.new(
@opts[:type_filter], @opts[:type_filter],
clean_term, term,
@search_context, @search_context,
@include_blurbs, @include_blurbs,
@blurb_length @blurb_length

View File

@@ -30,12 +30,14 @@ class Search
attr_accessor :search_log_id attr_accessor :search_log_id
BLURB_LENGTH = 200
def initialize(type_filter, term, search_context, include_blurbs, blurb_length) def initialize(type_filter, term, search_context, include_blurbs, blurb_length)
@type_filter = type_filter @type_filter = type_filter
@term = term @term = term
@search_context = search_context @search_context = search_context
@include_blurbs = include_blurbs @include_blurbs = include_blurbs
@blurb_length = blurb_length || 200 @blurb_length = blurb_length || BLURB_LENGTH
@posts = [] @posts = []
@categories = [] @categories = []
@users = [] @users = []
@@ -72,7 +74,7 @@ class Search
end end
end end
def self.blurb_for(cooked, term = nil, blurb_length = 200) def self.blurb_for(cooked, term = nil, blurb_length = BLURB_LENGTH)
blurb = nil blurb = nil
cooked = SearchIndexer.scrub_html_for_search(cooked) cooked = SearchIndexer.scrub_html_for_search(cooked)
@@ -91,14 +93,11 @@ class Search
end end
if term if term
terms = term.split(/\s+/) if term =~ Regexp.new(Search::PHRASE_MATCH_REGEXP_PATTERN)
phrase = terms.first term = Regexp.last_match[1]
if phrase =~ Regexp.new(Search::PHRASE_MATCH_REGEXP_PATTERN)
phrase = Regexp.last_match[1]
end end
blurb = TextHelper.excerpt(cooked, phrase, blurb = TextHelper.excerpt(cooked, term,
radius: blurb_length / 2 radius: blurb_length / 2
) )
end end

View File

@@ -101,6 +101,25 @@ describe SearchController do
expect(data['topics'][0]['id']).to eq(awesome_post.topic_id) expect(data['topics'][0]['id']).to eq(awesome_post.topic_id)
end end
it "can search correctly with advanced search filters" do
awesome_post.update!(
raw: "#{"a" * Search::GroupedSearchResults::BLURB_LENGTH} elephant"
)
get "/search/query.json", params: {
term: 'order:views elephant', include_blurb: true
}
expect(response.status).to eq(200)
data = response.parsed_body
expect(data['posts'].length).to eq(1)
expect(data['posts'][0]['id']).to eq(awesome_post.id)
expect(data['posts'][0]['blurb']).to include('elephant')
expect(data['topics'][0]['id']).to eq(awesome_post.topic_id)
end
it 'performs the query with a type filter' do it 'performs the query with a type filter' do
get "/search/query.json", params: { get "/search/query.json", params: {
@@ -141,7 +160,6 @@ describe SearchController do
end end
it "should return the right result" do it "should return the right result" do
get "/search/query.json", params: { get "/search/query.json", params: {
term: user_post.topic_id, term: user_post.topic_id,
type_filter: 'topic', type_filter: 'topic',