Как определить поле в Solr, чтобы получить наилучшие результаты предложений

#indexing #solr #search-engine #autosuggest #search-suggestion

Вопрос:

Допустим, у меня есть список из примерно 17 000 наименований лекарств, которые я хочу иметь возможность искать: [Ацетаминофен, Ибупрофен, Ксанакс, перкоцет и т. Д.]. Я хочу иметь возможность предлагать лекарства из списка по мере ввода пользователем.

Однако, как у меня есть, когда я набираю «ibup», предложения «I-123 MIBG», «I 123 Mini», «I-131 Mini», » I-Prin (Устный)» и т. Д….. Я бы ожидал, что «Ибупрофен» будет одним из, если не лучшим, результатом в списке предложений. Как мне определить a field и fieldType так, чтобы он хорошо работал с суггестором.

Тип поля каждого названия препарата-это текстовый генератор по умолчанию, который встроен в:

 <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
 

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

 <searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">mySuggester</str>
    <str name="lookupImpl">FuzzyLookupFactory</str>
    <str name="storeDir">fuzzyDirectory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">drugName</str>
    <str name="suggestAnalyzerFieldType">text_general</str>
    <str name="buildOnStartup">false</str>
    <str name="buildOnCommit">false</str>
  </lst>
</searchComponent>

<requestHandler name="/suggesthandler" class="solr.SearchHandler" startup="lazy" >
  <lst name="defaults">
    <str name="suggest">true</str>
    <str name="suggest.count">10</str>
    <str name="suggest.dictionary">mySuggester</str>
  </lst>
  <arr name="components">
    <str>suggest</str>
  </arr>
</requestHandler>
 

Комментарии:

1. Алло, как ты звонишь суггестендлеру? Я построил ядро со всей информацией, которую вы здесь разместили, и когда я звоню: /solr/stack_o/suggesthandler?indent=onamp;q=ibupamp;wt=json, я получаю: 1 предложение: Ибупрофен. предложения: [ { термин: «Ибупрофен», вес: 0, полезная нагрузка: «» } ]