首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticseach:匹配短语和术语

Elasticseach:匹配短语和术语
EN

Stack Overflow用户
提问于 2015-09-30 21:15:05
回答 1查看 230关注 0票数 0

在elasticsearch中,我正在构造一个经过过滤的查询,以查找包含的文档--一个短语和一个术语。以下查询不起作用。它似乎返回查询数组中的项的结果,但是好像有一个“或”运算符被应用了。

编辑:由于我使用的是PHP,下面的示例是php数组。

代码语言:javascript
复制
'query' => [
    'filtered' => [
        'query' => [
            'match' => [
                "post_content" => [
                    'query' => ['ambulance services', 'veteran'],
                    'operator' => 'and',
                    'type' => 'phrase'
                ]
            ]
        ],
        'filter' => [
            ...
        ]
    ]
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 21:45:08

在此之前,我从未见过match查询的语法,您可以像以前一样为查询提供数组。但是我在0.90版中尝试了这一点,并看到它只是返回了第二个字符串的结果。所以使用JSON,我尝试的是这样的东西:

代码语言:javascript
复制
{
    "query" : {
        "filtered" : {
            "query" : {
                "match" : {
                    "post_content" : {
                        "query" : [ "test string 1", "test string 2" ]
                    }
                }
            }
        }
    }
}

如果您引用匹配查询文档,则and运算符确保所有术语都在post_content字段中,而不考虑术语的位置。我认为匹配查询可以归结为一个bool查询,其中查询中的每个术语都由一个子句表示。所以操作员没有完全按照你的要求去做。

我认为以下几点对你想要的都有帮助:

代码语言:javascript
复制
{
    "query" : {
        "bool" : {
            "should" : [
                {
                    "match" : {
                        "post_content" : {
                            "type" : "phrase",
                            "query" : "ambulance services"
                        }
                    }
                },
                {
                    "match" : {
                        "post_content" : {
                            "query" : "veteran"
                        }
                    }
                }
            ],
            "minimum_should_match" : 2
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32875765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档