elasticsearch - 只返回搜索结果的唯一值 - Elasticsearch
问题描述
我只想在查询中返回唯一的 _source 值。现在,下面的查询返回一堆对象,"_source": {"serviceTitle": "Blood Count" }
我希望它只返回一个。
我有一个这样的查询:
{
"_source": ["serviceTitle"],
"size": 5,
"query": {
"multi_match": {
"query": "blood count",
"type": "bool_prefix",
"fields": [
"serviceTitle",
"serviceTitle._2gram",
"serviceTitle._3gram"
]
}
}
}
将返回这个:
"took": 317,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 297,
"relation": "eq"
},
"max_score": 7.6956334,
"hits": [
{
"_index": "recommendation-charlie",
"_type": "_doc",
"_id": "service_14815",
"_score": 7.6956334,
"_source": {
"serviceTitle": "Blood Count"
}
},
{
"_index": "recommendation-charlie",
"_type": "_doc",
"_id": "service_17946",
"_score": 7.6956334,
"_source": {
"serviceTitle": "Blood Count"
}
},
{
"_index": "recommendation-charlie",
"_type": "_doc",
"_id": "service_1459",
"_score": 7.551247,
"_source": {
"serviceTitle": "Blood Count"
}
}
]
}
}
我想尽可能少地更改我的初始查询,我知道我可能可以这样做,aggs:
但这迫使我更改查询的其他部分。任何帮助,将不胜感激!
解决方案
它并不像您希望的那样简单。最简单的方法是:
- 删除索引并调整映射如下:
PUT recommendation-charlie
{
"mappings": {
"properties": {
"citations": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"serviceTitle": { <---
"type": "text",
"fields": {
"as_i_type": { <---
"type": "search_as_you_type",
"max_shingle_size": 3
},
"keyword": { <---
"type": "keyword"
}
}
}
}
}
}
- 重新索引您的文档
- 搜索该
.as_i_type
字段(更多关于这里的多字段)但汇总.keyword
:
POST recommendation-charlie/_search
{
"_source": [
"serviceTitle"
],
"size": 5,
"query": {
"multi_match": {
"query": "blood count",
"type": "bool_prefix",
"fields": [
"serviceTitle.as_i_type", <---
"serviceTitle.as_i_type._2gram",
"serviceTitle.as_i_type._3gram"
]
}
},
"aggs": {
"by_unique_titles": {
"terms": {
"field": "serviceTitle.keyword",
"order": {
"max_score": "desc"
}
},
"aggs": {
"max_score": {
"max": {
"script": "_score"
}
}
}
}
}
}
推荐阅读
- java - 如何在 java 中使用 jdbc 编写选择查询需要检查 COLUMN 是否为 NULL?
- sql-server - 按名称删除分区 sql server
- ios - 处理多个任务时如何跟踪进度和增加进度视图的计数?
- python - 使用 matplotlib 增加绘图和标题之间的空间
- azure-cognitive-search - Azure 搜索排序,如 localeCompare javascript 功能
- javascript - 如何将图像和数据添加到 Firebase
- c# - 如何将带有滑块的 HH:mm 格式设置为文本框
- xpath - XPath 1.0 代码选择了错误的最大值
- c# - 删除 linq 中的循环导致性能降低
- ios - 如何检测 AVplayer 并从 WKWebView 获取当前视频的 url?