Увеличить результат на указанный поисковый запрос сверху

#solr

#solr

Вопрос:

Я использую apache solr 3.1 с drupal

Как можно увеличить результат сверху, указанный в поле поиска?

Например, в поле поиска, если пользователь вводит continuing, solr показывает документ, который имеет непрерывность сверху, и документ с продолжением ниже, я хочу показать документ с продолжением выше, чем непрерывность

http://localhost:8983/solr/select /?q = продолжение amp; qf = заголовок amp; fl = заголовок% 20score amp;bq = заголовок: продолжение ^ 10.0

Ответ №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. не уверен, что получил ваш комментарий. Изменен ответ с полной конфигурацией.