为什么在Solr中搜索部分词没有结果?

Why don't I get results when I search for partial words in Solr?

我试图找出我的分析器在 Solr 中的正确顺序,但当我搜索部分单词时没有得到任何结果。例如:

查询: Sto

想要的结果:斯德哥尔摩

查询:瑞典是

期望的结果:瑞典是一个欧洲城市

我只在搜索全部含义时收到结果,即期望的结果。对于到目前为止我所做的可能有问题的任何提示或技巧,我将不胜感激

<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.LengthFilterFactory" min="2" max="15"/>
            <filter class="solr.PorterStemFilterFactory"/>
            <filter class="solr.FlattenGraphFilterFactory"/>
            <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.LengthFilterFactory" min="2" max="15"/>
            <filter class="solr.PorterStemFilterFactory"/>
            <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

您正在通过应用字段类型 text general 来标记文本。

为了获得部分单词匹配,您必须更改分词器。

在这种情况下尝试使用 ngram 分词器。 N-Gram 分词器。

读取字段文本并生成给定范围内大小的 n-gram 标记。

工厂class:solr.NGramTokenizerFactory

参数:

minGramSize:(整数,默认为 1)最小 n-gram 大小,必须 > 0。

maxGramSize:(整数,默认为 2)最大 n-gram 大小,必须 >= minGramSize。

示例:

默认行为。请注意,此分词器在整个字段上运行。它不会在 whitespace 处打破场。结果,space 字符包含在编码中。

<analyzer>
  <tokenizer class="solr.NGramTokenizerFactory"/>
</analyzer>

对于第二种情况,您将获得结果,但您正在寻找短语匹配。对于这样的文本,您需要使用 text_general 字段类型。也尝试使用 ediamx 并检查。

还有一点,你可以在solr admin分析页面验证你的字段类型。

我找到了丢失的部分。我犯的错误是我将我的字段作为字符串索引。索引为字符串的字段在没有分析的情况下被索引为短语。因此,我无法搜索字符串

的部分 words/part