我通过过滤和使用term查询来应用分数来检索文档。查询应匹配具有指定颜色的所有动物 - 匹配的颜色越多,文档的分数越高。奇怪的是,term查询terms结果却有不同的评分。
{
"query": {
"bool": {
"should": [
{"terms": {"color": ["brown","darkbrown"] } },
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
应该和使用一样
{"term": {"color": {"value": "brown"} } },
{"term": {"color": {"value": "darkbrown"} } }
Run Code Online (Sandbox Code Playgroud)
查询编号 无论 1 个或 2 个术语匹配,1 都会为文档提供完全相同的分数。如果匹配更多颜色,后者当然会返回更高的分数。
正如协调因子所述,如果匹配的术语越多,返回的分数应该越高。因此,这两个查询应该产生相同的分数 - 或者是因为term查询不分析搜索词?
我的字段被索引为文本。字符串被索引为字符串的“数组”,例如"brown","darkbrown"
假设我有一种查询语言,可以将“自然”语言查询解析为弹性搜索查询。
假设我们有以下查询:
(type == "my-type" || device_id == "some-device-id") && id == "123456789"
Run Code Online (Sandbox Code Playgroud)
我怎样才能在弹性搜索中实现这一点?
我尝试过:
{
"bool": {
"filter": {
"term": {
"id": "123456789"
}
},
"should": [
{
"term": {
"type": "my-type"
}
},
{
"term": {
"device_id": "some-device-id"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的。
我究竟做错了什么?
映射:
{
"mappings": {
"_doc": {
"properties": {
"accepted_at": {
"type": "date",
"format": "strict_date_optional_time||date_time||epoch_millis"
},
"created_at": {
"type": "date",
"format": "strict_date_optional_time||date_time||epoch_millis"
},
"device_id": {"type": "keyword"},
"id": {"type": "keyword"},
"location": {"type": "geo_point"},
"message_id": {"type": …Run Code Online (Sandbox Code Playgroud)