我想创建一个字段,该字段仅在该字段的文档值与没有添加的查询词匹配时才匹配。例如,对“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 以便可以提升与整个字段完全匹配的文档:
<field name="lastNameExact" type="string" indexed="true" stored="false" omitNorms="true" omitTermFreqAndPositions="true"/>
<copyField source="lastName" dest="lastNameExact"/>
Run Code Online (Sandbox Code Playgroud)
我是否可以对此进行修改,以便 lastNameExact 字段只会命中包含具有整个搜索查询的字段的文档?
我可以建议你解决这个问题。不要为 lastNameExact使用类型字符串,而是使用精确匹配字段类型。
<fieldType name="exact_match" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory"/>
</analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)
复制字段应保持不变。
工作 schema.xml 的链接 - https://github.com/MysterionRise/information-retrieval-adventure/blob/dadb683820fe4f1eaf6081185a933a28a5e1e481/lucene5/src/main/resources/solr/cores/test/conf/schema.xml
| 归档时间: |
|
| 查看次数: |
867 次 |
| 最近记录: |