ApacheSolr-suggester在建议中省略了连字符和方括号

ApacheSolr-suggester在建议中省略了连字符和方括号,solr,Solr,使用Solr7.1.3,我试图实现一个suggester。 基本建议有效,但我的索引中有如下特殊术语: [999-99-9] 现在,当我使用 q=myfield:[999-9* 我确实得到了一些建议,但没有连字符和方括号 sugggestions:[{ "term":"999 99 9" ...}] 我的期望是: sugggestions:[{ "term":"[999-99-9]" ...}] 如何告诉SOLR包含方括号和连字符 这是我的建议: <searchComponent

使用Solr7.1.3,我试图实现一个suggester。 基本建议有效,但我的索引中有如下特殊术语:

[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>

我的建议者
FreeTextLookupFactory
文档字典工厂
全文索引
3.
0.004
假的
假的
我的建议者
正文\u概述
我也尝试过这个(不会返回任何结果):


infixSuggester
解析固定查找工厂
文档字典工厂
全文索引
全文索引
正文\u概述
[编辑]以下是我的字段类型定义:

<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>

所以,我找到了答案

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>

真的
10
建议者
建议
建议者
FreeTextLookupFactory
文档字典工厂
野外
卡塞格斯特
麦菲尔德

它仍然不返回方括号,但连字符在那里。

字段的定义是什么?IIRC FreeTextLookupFactory使用为字段生成的标记生成建议,这些建议将根据您的字段定义进行预处理。我在问题中添加了字段类型定义。正如我所读到的,关键字TokenizerFactory应该工作吗?我用«string»和«text_general»als试过了。但是你把
suggestFreeTextAnalyzerFieldType
作为
text_general
-这个字段将以不同于你给出的字段类型的方式进行标记。当我使用相同的(myField)时,我什么也得不到
<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>