ElasticSearch - multi_match 和 AND/OR
ElasticSearch - multi_match with AND/OR
我想在索引中的多个字段中使用 multi_match
。
例如,我有这个用户索引。
Users
id
real_name
contact_name
user_name
这些字段都使用标准分析器。所以我想搜索这 3 个字段(real_name、contact_name、user_name)并查找至少在其中一个字段中同时具有 "John" 和 "Peter" 的用户那些字段。
我知道如果不需要 AND 部分我可以使用 multi_match。示例:仅搜索 John:
{
"multi_match" : {
"query": "john",
"fields": [ "real_name", "contact_name", "user_name" ]
}
}
但是如果我想要额外的 and
条件,我该怎么做。 multi_match 可以做到这一点吗?
试试这个。 John 必须出现在 real_name 或 contact_name 或 user_name.
{
"bool": {
"should": [
{
"multi_match" : {
"query": "john",
"type": "cross_fields",
"fields": [ "real_name", "contact_name", "user_name" ],
"minimum_should_match": "50%"
}
}
]
}
}
使用"operator" : "AND"
:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "john",
"fields": [
"real_name",
"contact_name",
"user_name"
],
"type": "cross_fields",
"operator": "AND"
}
}
]
}
}
}
我想在索引中的多个字段中使用 multi_match
。
例如,我有这个用户索引。
Users
id
real_name
contact_name
user_name
这些字段都使用标准分析器。所以我想搜索这 3 个字段(real_name、contact_name、user_name)并查找至少在其中一个字段中同时具有 "John" 和 "Peter" 的用户那些字段。
我知道如果不需要 AND 部分我可以使用 multi_match。示例:仅搜索 John:
{
"multi_match" : {
"query": "john",
"fields": [ "real_name", "contact_name", "user_name" ]
}
}
但是如果我想要额外的 and
条件,我该怎么做。 multi_match 可以做到这一点吗?
试试这个。 John 必须出现在 real_name 或 contact_name 或 user_name.
{
"bool": {
"should": [
{
"multi_match" : {
"query": "john",
"type": "cross_fields",
"fields": [ "real_name", "contact_name", "user_name" ],
"minimum_should_match": "50%"
}
}
]
}
}
使用"operator" : "AND"
:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "john",
"fields": [
"real_name",
"contact_name",
"user_name"
],
"type": "cross_fields",
"operator": "AND"
}
}
]
}
}
}