[英]elasticsearch tf-idf and ignoring field length norm in search
您不能基于每个搜索禁用规范,但您可以使用多字段API添加禁用规范的其他字段。
PUT /my_index
{
"mappings": {
"my_type": {
"properties": {
"my_field": {
"type": "string",
"fields": {
"no_norms": {
"type": "string",
"norms": {
"enabled": false
}
}
}
}
}
}
}
}
现在,你可以搜索my_field
如果你需要规范和my_field.no_norms
如果你不这样做。 您必须重新索引数据,以便新字段可用于所有文档,只需将其添加到映射中,就不会更改退出文档的任何内容。
所以这就是我最终使用的方法。 而不是使用tf-idf(当前弹性搜索默认值)我使用了BM25,这应该更好。 此外,它具有参数“b”,表示场长规范的重要性。 对于“b = 0”,忽略字段长度范数,而默认值为0.75。 可在此处找到BM25的讨论。 我的elasticsearch.yml里面有
index :
similarity:
default:
type: BM25
b: 0.0
k1: 1.2
norm_bm25:
type: BM25
b: 0.75
k1: 1.2
对于那些使用elasticsearch javascript api的人,可以在索引创建期间定义自定义相似性
client.indices.create({
index: "db",
body: {
settings: {
number_of_shards: 1,
similarity : "norm_bm25"
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.