小编ube*_*ain的帖子

Solr 匹配整个字段

我想创建一个字段,该字段仅在该字段的文档值与没有添加的查询词匹配时才匹配。例如,对“john”的查询应该只返回名称为“john”的结果,而不是“johnson”、“johns”等。

我看过其他关于 solr 中精确匹配的帖子,普遍的答案似乎是在 schema.xml 中创建一个类型为 string 的新字段。我已经尝试过了,但是当确切的查询包含在一个字段中时,这种方法似乎也匹配(包含“johnson”的结果仍然与查询“john”一起出现)。

该架构具有字段 lastName 和 lastName_ngram (我们目前正在搜索):

<field name="lastName_ngram"        type="text_token_ngram"     indexed="true" stored="false" omitNorms="true" omitTermFreqAndPositions="true"/>
<fieldType name="text_token_ngram" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer  class="solr.StandardTokenizerFactory"/>
            <filter     class="solr.LowerCaseFilterFactory"/>
            <filter     class="solr.TrimFilterFactory"/>
            <filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="1"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer  class="solr.StandardTokenizerFactory"/>
            <filter     class="solr.LowerCaseFilterFactory"/>
            <filter     class="solr.TrimFilterFactory"/>
        </analyzer>
    </fieldType>

<field name="lastName"              type="text_token"           indexed="true" stored="true"  omitNorms="true" omitTermFreqAndPositions="true"/>
<fieldType name="text_token" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer  class="solr.KeywordTokenizerFactory"/>
            <filter     class="solr.LowerCaseFilterFactory"/>
            <filter     class="solr.TrimFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer  class="solr.KeywordTokenizerFactory"/>
            <filter     class="solr.LowerCaseFilterFactory"/>
            <filter     class="solr.TrimFilterFactory"/>
        </analyzer>
    </fieldType>
Run Code Online (Sandbox Code Playgroud)

我想包含一个字段 lastNameExact 以便可以提升与整个字段完全匹配的文档: …

search solr

3
推荐指数
1
解决办法
867
查看次数

标签 统计

search ×1

solr ×1