Apache SOLR - подсказчик оставляет в предложениях дефисы и квадратные скобки - PullRequest
0 голосов
/ 01 июля 2018

Используя SOLR 7.1.3, я пытаюсь реализовать подсказку. Основные предложения работают, но в моем индексе есть специальные термины, которые выглядят так:

[999-99-9]

Теперь, когда я запускаю подсказку, используя

q=myfield:[999-9*

Я получаю предложения, но без дефисов и квадратных скобок.

sugggestions:[{ "term":"999 99 9" ...}]

Мое ожидание будет:

sugggestions:[{ "term":"[999-99-9]" ...}]

Как мне сказать SOLR включить квадратные скобки и дефисы?

Вот мой советчик:

<searchComponent name="suggest" class="solr.SuggestComponent">
    <lst name="suggester">
      <str name="name">mySuggester</str>
      <str name="lookupImpl">FreeTextLookupFactory</str>
      <str name="dictionaryImpl">DocumentDictionaryFactory</str>
      <str name="field">fulltext</str>
      <str name="ngrams">3</str>
      <float name="threshold">0.004</float>
      <str name="highlight">false</str>
      <str name="buildOnCommit">false</str>
      <str name="storeDir">mySuggester</str>
      <str name="separator"> </str>
      <str name="suggestFreeTextAnalyzerFieldType">text_general</str>
    </lst>
  </searchComponent>

Я также попробовал это (что не дает никаких результатов):

<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">infixSuggester</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">fulltext</str>
    <str name="payloadField">fulltext</str>
    <str name="suggestAnalyzerFieldType">text_general</str>
  </lst>
</searchComponent>

[Edit] вот мое определение fieldType:

<fieldType name="myField" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
       <filter class="solr.PatternReplaceFilterFactory" pattern="'"
replacement="" replace="all" />

      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
       <filter class="solr.PatternReplaceFilterFactory" pattern="'"
replacement="" replace="all" />

     <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

1 Ответ

0 голосов
/ 05 июля 2018

Итак, я понял это.

schema.xml

    <fieldType name="myField" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <filter class="solr.StandardFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.TrimFilterFactory"/>
        </analyzer>
    </fieldType>

<field name="TheField" type="myField" multiValued="true" indexed="true" stored="true"/>

solrconfig.xml:

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

<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">Suggester</str>
    <str name="lookupImpl">FreeTextLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">TheField</str>
    <str name="storeDir">casSuggester</str>
    <str name="suggestFreeTextAnalyzerFieldType">myField</str>
  </lst>
</searchComponent>

Он по-прежнему не возвращает квадратные скобки, но дефисы есть.

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