我有一个列为Name
,Address
and和Phone
的列表,我想运行一个弹性搜索查询,如列的值是
Name
:nametest
Address
:addresstest
Phone
:123456
用模糊参数作为
Name
:2
Address
:5
Phone
:1
单个查询是
{"query": {"match" : {"Address" : {"query" : "Address","fuzziness" : 2}}}}
如何使用多匹配查询来获得结果?
这不起作用
{
"query": {
"match": [
{
"Name": {
"query": "Nametest",
"fuzziness": 3,
"boost": 5.0
}
},
{
"Address": {
"query": "Addresstest",
"fuzziness": 3,
"boost": 4.0
}
},
{
"Phone": {
"query": "5680728.00",
"fuzziness": 2,
"boost": 4.0
}
}
],
"must": [
],
"minimum_should_match": 2
}
}
你应该使用boolean query结合多个must
条款。这些条款将与您的文档强制匹配,并将用于计算分数。如果您希望至少匹配2个子句,则可以使用minimum_should_match
参数并将所有条件传输到should
子句。
在这些子句中,您可以在尝试时使用匹配查询。
例如:
{
"query": {
"bool": {
"must": [],
"should": [
{
"match": {
"Name": {
"query": "Nametest",
"fuzziness": 3,
"boost": 5
}
}
},
{
"match": {
"Address": {
"query": "Addresstest",
"fuzziness": 3,
"boost": 4
}
}
},
{
"match": {
"Phone": {
"query": "5680728.00",
"fuzziness": 2,
"boost": 4
}
}
}
],
"minimum_number_should_match": 2
}
}
}
使用布尔查询
GET query
{
"query": {
"bool": {
"must": [
{
"match": {
"Name": {
"query": "Nametest",
"fuzziness": 3,
"boost": 5
}
}
},
{
"match": {
"Address": {
"query": "Addresstest",
"fuzziness": 3,
"boost": 4
}
}
},
{
"match": {
"Phone": {
"query": "5680728.00",
"fuzziness": 2,
"boost": 4
}
}
}
]
}
}
}