我有一个使用关键字 token 生成器(整个术语是 token )的字段类型,具有小写和边缘n-gram过滤器,例如“Robert Longo”存储为“r”,“ro”,...,“robert l”,“robert lo”等。所有这些似乎都可以在分析管理页面上按预期工作。

但是,当我搜索“robert long”(带引号)时,即使该 token 完全匹配,也没有任何结果。当我搜索不带引号的词时,我的术语会被预先标记,并且与所有“robert”和所有“l”匹配,而不仅仅是“robert l”。我是否需要以某种方式指定通配符来告诉它该术语还有更多内容?

从架构中:

<fieldType name="edge_text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

我的目标是要有一个从我们存储的术语中返回短语匹配的词组匹配项,该匹配项从给出的确切内容开始,因此术语的精确匹配和顺序至关重要。

有任何想法吗?

最佳答案

它应该工作正常,我可以得到结果。
您可以针对特定领域进行测试吗?如果字段名称是edge_text并且已被索引,则可以尝试q=edge_text:"robert long"

10-06 14:32