弹性搜索中的多 "match-phrase" 查询
Multi-"match-phrase" query in Elastic Search
这对我来说应该是显而易见的,但事实并非如此。下面的双赛只是第二阶段(本例为Cape Basin
)
"query": {
"match_phrase": {
"contents": {
"query": "St Peter Fm",
"query": "Cape Basin"
}
}
}
"query": {
"match_phrase": {
"contents": {
"query": ["St Peter Fm", "Cape Basin"]
}
}
}
而下面的错误提示
"query": {
"match_phrase": {
"contents": {
"query": "St Peter Fm"
},
"contents": {
"query": "Cape Basin"
}
}
}
我想匹配所有包含 either 个短语的所有文档,与输入的完全相同。
您的第一个查询实际上不是有效的 JSON 对象,因为您两次使用相同的字段名称。
您可以使用 bool must or should query 来匹配两个或其中一个短语:
PUT phrase/doc/1
{
"text": "St Peter Fm some other text Cape Basin"
}
//Match BOTH
GET phrase/_search
{
"query": {
"bool": {
"must": [
{"match_phrase": {"text": "St Peter Fm"}},
{"match_phrase": {"text": "Cape Basin"}}
]
}
}
}
//Match EITHER ONE
GET phrase/_search
{
"query": {
"bool": {
"should": [
{"match_phrase": {"text": "St Peter Fm"}},
{"match_phrase": {"text": "Cape Basin"}}
]
}
}
}
事实证明,您可以通过为 multi_match
启用短语语义来做到这一点。
为此,您将 type:
属性添加到 multi_match
语法中,如下所示:
GET /_search
{
"query": {
"multi_match" : {
"query": "quick brown fox",
"type": "phrase",
"fields": [ "subject", "message" ]
}
}
}
一旦您这样想(相对于启用 "multi" 对其他搜索子句的支持),它就符合您的预期。
这对我来说应该是显而易见的,但事实并非如此。下面的双赛只是第二阶段(本例为Cape Basin
)
"query": {
"match_phrase": {
"contents": {
"query": "St Peter Fm",
"query": "Cape Basin"
}
}
}
"query": {
"match_phrase": {
"contents": {
"query": ["St Peter Fm", "Cape Basin"]
}
}
}
而下面的错误提示
"query": {
"match_phrase": {
"contents": {
"query": "St Peter Fm"
},
"contents": {
"query": "Cape Basin"
}
}
}
我想匹配所有包含 either 个短语的所有文档,与输入的完全相同。
您的第一个查询实际上不是有效的 JSON 对象,因为您两次使用相同的字段名称。
您可以使用 bool must or should query 来匹配两个或其中一个短语:
PUT phrase/doc/1
{
"text": "St Peter Fm some other text Cape Basin"
}
//Match BOTH
GET phrase/_search
{
"query": {
"bool": {
"must": [
{"match_phrase": {"text": "St Peter Fm"}},
{"match_phrase": {"text": "Cape Basin"}}
]
}
}
}
//Match EITHER ONE
GET phrase/_search
{
"query": {
"bool": {
"should": [
{"match_phrase": {"text": "St Peter Fm"}},
{"match_phrase": {"text": "Cape Basin"}}
]
}
}
}
事实证明,您可以通过为 multi_match
启用短语语义来做到这一点。
为此,您将 type:
属性添加到 multi_match
语法中,如下所示:
GET /_search
{
"query": {
"multi_match" : {
"query": "quick brown fox",
"type": "phrase",
"fields": [ "subject", "message" ]
}
}
}
一旦您这样想(相对于启用 "multi" 对其他搜索子句的支持),它就符合您的预期。