如何配置SOLR以便用户默认进行前缀搜索?

dud*_*ude 6 search solr wildcard prefix

我正在使用SOLR 3.2.对于文本字段类型,我的应用程序在SOLR实例上发出搜索查询.当用户发出像"book"这样的查询时,我如何让SOLR返回"book","bookshelf","bookasd"等结果.我应该手动将"*"字符附加到查询字符串中,还是在SOLR中有设置,以便默认情况下对字段进行前缀搜索?

这是文本字段类型的schema.xml部分:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <charFilter class="solr.HTMLStripCharFilterFactory"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="1" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
      </analyzer>
      <analyzer type="query">
        <charFilter class="solr.HTMLStripCharFilterFactory"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenat0All="1" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
      </analyzer>
    </fieldType>
Run Code Online (Sandbox Code Playgroud)

Jay*_*dra 0

您要么必须通过在搜索词末尾附加通配符来在客户端进行处理。

影响 :-

  1. 通配符查询会对性能产生影响
  2. 通配符查询不进行分析。因此查询时间分析不会应用于您的搜索词

另一种选择是使用您需要的处理来实现自定义查询解析器。