Apache Solr 自动搜索 (*)

Apache Solr automatically search with (*)

晚上好,

当我搜索单词 "app" 时,它没有显示单词 "apple"。但是如果我搜索 "app*",它会显示 "apple" 和 "app"。我不想在搜索栏中写“*”。如果我只搜索 "app" 并且它显示 "apple" 和 "app",我该怎么做?

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

我尝试添加 <filter class="solr.ReversedWildcardFilterFactory"/> 但是没用。

有人可以帮助我吗?

我使用 Apache Solr 6.4.1

抱歉我的英语不好。

使用EdgeNGramFilterFactory

EdgeNGramFilterFactory:

This filter generates edge n-gram tokens of sizes within the given range.

参数:

  • minGramSize:(整数,默认为 1)最小克大小。
  • maxGramSize:(整数,默认为 1)最大克大小。

示例:

如果我们使用 minGramSize = 1 和 maxGramSize = 4 那么

在:"four score"
要过滤的分词器:"four"、"score"
输出:"f"、"fo"、"fou"、"four"、"s"、"sc"、"sco"、"scor"

对于您的情况,您可以使用以下架构:

<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory" />
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="200"/>
     </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldType>

并将您的 fieldType 更新为 text_ngram 例如

<field name="name" type="text_ngram" indexed="true" stored="false" multiValued="true"/>

注意:不要忘记重新加载核心和重新索引数据