我有每一种产品的产品清单和化合物阵列,即‘钠’,‘碳酸氢钠’,……。在本例中,‘not’和‘碳酸氢钠’是两个可以独立搜索的不同值,这使事情复杂化,因此使用text关键字字段标准没有帮助。
我需要一些关于在Elasticsearch中处理这些字符串数组的最佳方法的指导,同时保留Elasticsearch的索引魔力。我很感激你能提供的任何帮助。
目前我正在使用Elasticsearch 6.3
发布于 2020-12-31 02:12:21
您可以使用 多匹配查询,它构建在匹配查询的基础上,允许多字段查询。
使用索引数据、搜索查询和搜索结果添加一个工作示例。
索引数据:
{
"product": "product1",
"compounds": [
"Sodium",
"Sodium bicarbonate"
]
}
{
"product": "product2",
"compounds": [
"Sodium"
]
}
{
"product": "product3",
"compounds": [
"Sodium bicarbonate"
]
}
{
"product": "product4",
"compounds": [
"Chlorine
]
}搜索查询:
{
"query": {
"multi_match" : {
"query": "Sodium AND Sodium bicarbonate",
"fields": [ "compounds", "compounds.keyword" ]
}
}
}搜索结果:
"hits": [
{
"_index": "65513968",
"_type": "_doc",
"_id": "1",
"_score": 1.0897084,
"_source": {
"product": "product1",
"compounds": [
"Sodium",
"Sodium bicarbonate"
]
}
},
{
"_index": "65513968",
"_type": "_doc",
"_id": "3",
"_score": 1.0659102,
"_source": {
"product": "product3",
"compounds": [
"Sodium bicarbonate"
]
}
},
{
"_index": "65513968",
"_type": "_doc",
"_id": "2",
"_score": 0.7032229,
"_source": {
"product": "product",
"compounds": [
"Sodium"
]
}
}
]如果要返回包含字段中一个或多个确切术语的文档,则可以使用 术语查询 。
一份独特的化合物清单
要查找化学化合物的唯一列表,可以使用术语聚合。
{
"size": 0,
"aggs": {
"compounds": {
"terms": {
"field": "compounds.keyword"
}
}
}
}结果:
"aggregations": {
"compounds": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Sodium",
"doc_count": 2
},
{
"key": "Sodium bicarbonate",
"doc_count": 2
},
{
"key": "Chlorine",
"doc_count": 1
}
]
}
}https://stackoverflow.com/questions/65513968
复制相似问题