#solr
#solr
Вопрос:
Я использую apache solr 3.1 с drupal
Как можно увеличить результат сверху, указанный в поле поиска?
Например, в поле поиска, если пользователь вводит continuing, solr показывает документ, который имеет непрерывность сверху, и документ с продолжением ниже, я хочу показать документ с продолжением выше, чем непрерывность
Ответ №1:
Кажется, у вас есть элемент в цепочках фильтров, из-за которого непрерывность и непрерывность и сопоставляются с одним и тем же корнем и будут рассматриваться как равные.
вы хотите проверить, какой элемент вы используете, и хотите получить его в зависимости от ваших потребностей. Стандартный стеммер porter очень агрессивен, и вам могут понадобиться менее агрессивные параметры.
Solr в настоящее время не увеличивает точное совпадение выше, чем другие термины, которые сгенерировали тот же корень.
Одним из вариантов было бы иметь два поля в вашей схеме.
Исходная (title_stemmed) и неосновная версия (заголовок — без фильтра основы)
пример —
schema.xml —
<!-- Without Porter Stemmer -->
<fieldType name="text_non_stemmed" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<!-- With Porter Stemmer -->
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<field name="title" type="text" indexed="true" stored="true" termVectors="false" omitNorms="false"/>
<field name="title_non_stemmed" type="text_non_stemmed" indexed="true" stored="true" termVectors="false" omitNorms="false"/>
<copyField source="title" dest="title_non_stemmed"/>
вы можете взвешивать поля —
solrconfig.xml — измените обработчик запросов по умолчанию
<requestHandler name="search" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">dismax</str>
<str name="qf">
title_non_stemmed^1 title^0.8
</str>
<str name="q.alt">*:*</str>
<str name="rows">10</str>
<str name="fl">*,score</str>
</lst>
</requestHandler>
так что точное совпадение дает больше баллов, чем неточные совпадения, и отображается выше.
URL —
http://localhost:8983/solr/select/?q=continuing
Комментарии:
1. Спасибо, патил, я только что добавил <имя поля =»title_unstem» type=»text» indexed=»true» stored=»true» termVectors=»false» omitNorms=»false»/> и <Источник copyField=»title» dest=»title_unstem»/> но это дает мнетот же результат, пожалуйста, помогите
2. ваш тип поля, похоже, такой же «текст». отредактировал ответ с примером.
3. также вам может потребоваться перестроить индекс solr
4. <!— non stemmed field —> Текстовое поле»> lucene. анализ.стандарт. StandardAnalyzer»/></FieldType> я добавил это, но я не могу сортировать во время запроса localhost:8983/solr/select/… ^ 2 title ^ 1
5. не уверен, что получил ваш комментарий. Изменен ответ с полной конфигурацией.