我正在使用ES进行模糊搜索大量人名列表。
对于评分,TF是适用的,但在这种情况下,IDF并不需要。这会使得分数变得稀释。我仍然希望将TF和字段归一化应用于得分。
我怎样能够禁用/抑制我的查询中的IDF,但保留TF和字段归一化呢?
我看到了Disable IDF calculation 的讨论,但没有帮助到我。在这种情况下似乎也无法使用constant score query。
我正在使用ES进行模糊搜索大量人名列表。
对于评分,TF是适用的,但在这种情况下,IDF并不需要。这会使得分数变得稀释。我仍然希望将TF和字段归一化应用于得分。
我怎样能够禁用/抑制我的查询中的IDF,但保留TF和字段归一化呢?
我看到了Disable IDF calculation 的讨论,但没有帮助到我。在这种情况下似乎也无法使用constant score query。
当创建索引时,我们可以将自己的相似度计算方法放入设置部分。如果您只需要禁用IDF并使用其他内容作为默认设置,您可以编写一个简单的脚本,例如:
在创建索引时,可以将自定义的相似度计算方法加入设置部分。若想仅禁用IDF并使用其他默认设置,可编写类似以下的简单脚本:
"script": {"source": "double tf = Math.sqrt(doc.freq); double idf = 1.0; double norm = 1/Math.sqrt(doc.length); return query.boost * tf * idf * norm;"`}
这里展示了此处。
public float idf(long docFreq, long numDocs) {
从未被调用。在搜索和索引期间,我已经在我的索引设置中提供了自定义类。 - user1189332"City_ng": { "type": "string", "analyzer": "n-gram-analyser", "similarity": "my_similarity" }
我的设置JSON片段(直接在根级别)如下:"my_similarity": { "index": { "type": "com.concorde.extensions.score.IDFIgnoredSimilarityProvider" }, "search": { "type": "com.concorde.extensions.score.IDFIgnoredSimilarityProvider" } }
Elasticsearch版本为1.7.3 - user1189332