Я работаю над поиском в течение 2 дней, чтобы запросить поиск по ключевым словам, используя sunspot solr
. я не могу понять
Мой ожидаемый результат
если я ищу laptops in US
, он должен искать ноутбук и нас
Но приведенный ниже код ищет только ноутбуки, а не другие слова. Как я могу этого достичь.
Мой полный текст работает хорошо
Я отредактировал schema.xml
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
МОЯ модель содержит
searchable do
text :title,:description,stored: true
time :updated_at
text :product do
product.name if product
end
text :product_model do
product_model.name if product_model
end
end
Мой контроллер
@search = Post.search do
fulltext params[:search] do
query_phrase_slop 1
end
end
Изменить 1
У меня есть две строки с pizza
в одном столбце и post
в другом столбце. Если я ищу pizza
, он возвращает 5 результатов, если я ищу post
, он возвращает 1 результат. И, наконец, если я ищу pizza post
, ничего не получается. Но ожидаемый результат - получить 6 результатов.
Я изменил fulltext params[:search] do
на keywords params[:search] do
Изменить 2
def index
@search = Post.search do
fulltext params[:search].split(' ') do
phrase_slop 1
end
end
@posts = @search.results
end
StopFilterFactory
, может быть, попробовать добавитьKeepWordFilterFactory
сus
в нем? Кроме того, вы можете попробовать изменитьNGramFilter
наShingleFilter
, это может дать лучшие результаты, вот документы для справки: wiki.apache.org/solr/AnalyzersTokenizersTokenFilters - person zrl3dx   schedule 16.09.2013us
computer with rate of $2500
этот оператор должен искать как на компьютере, так и на $2500 - person overflow   schedule 16.09.2013edit 1
- person overflow   schedule 16.09.2013fulltext params[:search].split(' ')
? - person zrl3dx   schedule 16.09.2013edit 2
изменился, как вы упомянули, но возникает та же проблема. - person overflow   schedule 17.09.2013stored: true
из поляtext
вашей модели и переиндексируйте. - person zrl3dx   schedule 17.09.2013stored
, не работает тот же статус - person overflow   schedule 17.09.2013minimum_match 1
рядом сquery_phrase_slop
. Это логично, даже в исходниках четко написано, что если не указано значение, то все термины должны совпадать, ага. - person zrl3dx   schedule 18.09.2013