Есть ли способ использовать текстовый тег Solr вместе с фильтром n-edge-gram - PullRequest
1 голос
/ 16 октября 2019

Я делаю функцию автозаполнения Solr. В основном я намеревался предложить все возможные комбинации тегов из текстовой строки. Давайте рассмотрим пример строки поиска: найти все маршруты между Марсом и Юпитером .

Предположим, существует несколько документов solr, начинающихся с текста mars и Юпитер , например Марс1 , Марс2 , Юпитер8 . Я хотел получить предложения Solr, такие как

найти весь маршрут между mars1 и jupiter8

найти всемаршрут между mars2 и jupiter8

Также следует выполнить поиск частично введенного термина. Таким образом, следующий поисковый запрос также должен работать.

найти весь маршрут между Марсом и Джупи

Поисковые предложения:

найти всемаршрут между mars1 и jupiter8

найти все маршруты между mars2 и jupiter8

В этом случае использования, так как мне нужно было пометить строку поиска соответствующими объектами. я использую solrTextTagger .

Моя цепочка анализатора выглядит следующим образом

    <fieldType name="searchtag" class="solr.TextField" positionIncrementGap="100" postingsFormat="Memory"
    omitTermFreqAndPositions="true" omitNorms="true">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.PorterStemFilterFactory"/>
        <filter class="org.opensextant.solrtexttagger.ConcatenateFilterFactory" />
        <filter class="solr.EdgeNGramFilterFactory" maxGramSize="50" minGramSize="2"/>
      </analyzer>
      <analyzer type="query">
        <charFilter class="solr.HTMLStripCharFilterFactory"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
    </fieldType>

, она работает для solr 5.3.1. Но после Solr Solr 7,4 SolrTextTagger добавляется в Solr по умолчанию. С добавленным solrTextTagger я не могу достичь того же результата, что и выше.

Я пробовал это для solr 7.7.1.

  <fieldType name="searchtag" class="solr.TextField" postingsFormat="FST50" omitTermFreqAndPositions="true" omitNorms="true">
    <analyzer type="index">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" expand="false"/>
      <filter class="solr.EnglishPossessiveFilterFactory" />
      <filter class="solr.ASCIIFoldingFilterFactory"/>
      <filter class="solr.LowerCaseFilterFactory" />
      <filter class="solr.PorterStemFilterFactory"/>
      <filter class="solr.FlattenGraphFilterFactory"/>
      <filter class="solr.ConcatenateGraphFilterFactory" preserveSep="false" preservePositionIncrements="false"/>
      <filter class="solr.EdgeNGramFilterFactory" maxGramSize="50" minGramSize="2"/>
    </analyzer>
    <analyzer type="query">
      <charFilter class="solr.HTMLStripCharFilterFactory"/>
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.EnglishPossessiveFilterFactory" />
      <filter class="solr.ASCIIFoldingFilterFactory"/>
      <filter class="solr.LowerCaseFilterFactory" />
      <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
  </fieldType>

Выше не сработало. Я нашел причину в справочном руководстве Solr. Как указано ниже

Поле тега, которое должно быть TextField, с ConcatenateGraphFilterFactory в конце цепочки индексов (не цепочкой запросов): Установите preservePositionIncrements=false в этом фильтре,Рекомендуемые настройки поля: omitNorms=true, omitTermFreqAndPositions=true и postingsFormat=FST50.

Я перепробовал все возможные варианты расположения фильтров solr. Не удалось достичь того же результата, который я получал с помощью solr 5.3.1, поэтому я застрял с solr 5.3.1.

Есть ли способ использовать solrTextTagger с граничным n-граммовым фильтром принижняя часть цепи фильтра?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...