2012-05-23 3 views
0

В моем приложении Rails у меня есть модель вопроса, настройка с помощью sunspot solr с полем «текст», и я бы хотел искать в этом поле логическое ИЛИ между словами. Я обнаружил, что установка minimum_match на 1 решает мою проблему, однако я также хотел бы заказать результаты, увеличив вопросы, содержащие более одного слова. Есть ли способ сделать это с Solr? Документация не очень полезна для функций ранжирования.Оценка результатов минимального совпадения Solr

Edit: это полный запрос я выступаю в контроллере

@questions = Question.solr_search do 
    fulltext params[:query], :minimum_match => 1 
end.results 

ответ

1

Согласно http://wiki.apache.org/solr/SchemaXml,

оператор по умолчанию, используемый запросов парсера в Solr (SolrQueryParser) может быть сконфигурирован с оператором

<solrQueryParser defaultOperator="AND|OR"/>. 

по умолчанию является "ИЛИ", если не указано , Предпочтительно не использовать или полагаться на эту настройку; вместо этого обработчик запроса или запрос LocalParams должен указать оператор по умолчанию. Этот параметр здесь может быть опущен и рассматривается для устаревания.

Вы можете изменить defaultOperator в Solr/CONF/schema.xml или вы могли бы использовать LocalParams указать OR с помощью синтаксиса, как https://github.com/sunspot/sunspot/wiki/Building-queries-by-hand

Действительно оператор SunSpot по умолчанию «И», как указано в https://github.com/sunspot/sunspot/blob/master/sunspot_solr/solr/solr/conf/schema.xml

0

Логическое ИЛИ поведение по умолчанию обработчик запроса Dismax используется в SunSpot.

Кроме того, чем больше слов совпадают, тем выше оценка этого документа (который звучит как то, что вы хотите)

Question.search do 
    fulltext 'best pizza' 
end 

... должны возвращать результаты, которые соответствуют одному или оба слова (возвращая те, которые соответствуют как первый):

  1. «Джо имеет лучшую пиццу ломтиком в Нью-Йорке»
  2. «трудно сказать, какая пицца пла се это лучший «
  3. » Пицца не лучший пища для вас»
  4. „Я не забочусь ли пицца это плохо для вас!“
  5. «Как вы думаете, что такое фаст-фуд ??

minimum_match полезен только в том случае, если вы хотите отфильтровать результаты с низкой релевантностью (где только определенное количество или процент терминов были фактически сопоставлены). Это не влияет на скоринг или логическое поведение OR/AND.

+0

В моем опыте, а также отметил [здесь] (http: //blog.websolr.com/post/1299174416/how-do-i-query-with-boolean-logic-using-sunspot) и [здесь] (http://sunspot.github.com/sunspot/docs/Sunspot/DSL/StandardQuery.html) в минимальном абзаце соответствия, поведение по умолчанию поиска является логическим И между словами. Также я использую такой фильтр '' для текстовых полей, которые я не знаю, может ли привести к поведению по умолчанию ... –

+0

Сложнее подумать о том, что зажат в качестве такового, что благоприятствует документам, которые соответствуют большинству условий из запроса. Это обычное поведение, ожидаемое большинством людей. Первая ссылка, которую вы опубликовали, объясняет это довольно хорошо. ': minimum_match => 1' должно быть по умолчанию. Он вступает в силу только в том случае, если вы увеличиваете его (что ограничивает результаты документами, в которых больше условий соответствует). –

+0

NGramFilterFactory действительно полезен только в нескольких конкретных ситуациях (EdgeNGramFilterFactory помогает при префиксном поиске/автозаполнении). Вы, вероятно, согласитесь на кучу результатов, которых вы не хотите (например, поиск «zz» будет соответствовать чему-либо с «pizza»). Возможно, вы можете публиковать больше о том, что вы пытаетесь сделать. –

Смежные вопросы