我需要通过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" }}
]
}
}
}
}
答案 0 :(得分:1)
尝试这样
映射您的索引
{
"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"}}
]
}
}
}
希望有帮助