我需要通过 Python 模块查询 ElasticSearch 索引,我对 ElasticSearch 非常陌生。假设我的索引存储了成对的人和关于每对人的一些信息。我想知道如何创建一个 ElasticSearch 查询,它会给我以下一对。基本上,我想得到 some info
来自 person1
的对中的字段值被命名为 John White
和 teacher
和 person2
被命名为 Sarah Black
和 doctor
.我想要一个完全匹配,而不是模糊匹配。
"person1": {
"name": "John White",
"job": "teacher"
}
"person2": {
"name": "Sarah Black",
"job": "doctor"
}
"some info": "blah blah"
我尝试了下面的查询,但它给了我配对,其中只有一对匹配我要求的信息,另一个人的姓名/工作可能非常不同。如何获得两个人的信息匹配的完全匹配?
"query": {
"bool" : {
"must": {
"bool" : {
"should": [
{ "match": { "person1.name": "John White" }},
{ "match": { "person1.job": "teacher" }}
],
"should": [
{ "match": { "person2.name": "Sarah Black" }},
{ "match": { "person2.job": "doctor" }}
]
}
}
}
}
最佳答案
像这样试试
为您的索引映射
{
"settings": {
"analysis": {
"normalizer": {
"lc_normalizer": {
"type": "custom",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"person1": {
"properties": {
"name": {
"type": "text",
"fields": {
"exact": {
"type": "keyword",
"normalizer": "lc_normalizer"
}
}
},
"job": {
"type": "keyword"
}
}
},
"person2": {
"properties": {
"name": {
"type": "text",
"fields": {
"exact": {
"type": "keyword",
"normalizer": "lc_normalizer"
}
}
},
"job": {
"type": "keyword"
}
}
},
"some_info": {
"type": "text"
}
}
}
}
询问
{
"query": {
"bool": {
"must": [
{"match": {
"person1.name.exact": "john white"
}},
{"match": {
"person2.name.exact": "Sarah Black"
}},
{ "term": { "person1.job": "teacher"}},
{ "term": { "person2.job": "doctor"}}
]
}
}
}
希望能帮助到你
关于elasticsearch - 如何创建 ElasticSearch 查询来获取此信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043715/