在ElasticSearch中,我创建了两个带有一个字段的文档," CategoryMajor"
在doc1中,我将CategoryMajor设置为" Restaurants"
在doc2中,我将CategoryMajor设置为"餐厅餐厅餐厅餐厅"
如果我搜索CategoryMajor:Restaurants,则doc1显示为比doc2更相关。这不是典型的Lucene行为,它表示术语出现的次数越多,相关性就越高。 doc2应该比doc1更加相关。
我该如何解决这个问题?
答案 0 :(得分:4)
您可以在GET查询中添加& explain = true,以查看doc2的得分是否被“fieldNorm”因素降低。这是由默认的lucene相似度计算公式引起的,该公式降低了较长文档的分数。请阅读本文档关于默认lucene相似性公式:
http://lucene.apache.org/core/3_6_0/api/all/org/apache/lucene/search/Similarity.html
要禁用此行为,请将ClassMajor字段的“omit_norms = true”添加到索引映射中,方法是将PUT请求发送到:
http://localhost:9200/index/type/_mapping
请求正文:
{
"type": {
properties": {
"CategoryMajor": {
"type": "string",
"omit_norms": "true"
}
}
}
}
我不确定,但可能需要删除索引,再次创建索引,置于上方映射,然后重新索引文档。改变映射后重新索引是必要的:)。