将查询和嵌套查询组合在一起的弹性搜索

时间:2017-08-23 05:26:35

标签: elasticsearch

我已经阅读了一段时间的弹性搜索查询,文档似乎对我的一些查询没有帮助。 我正在尝试获取

的文件
((Field1=Keyword1 OR Field2=Keyword1) AND (Field1=Keyword2 OR Field2=Keyword2)) AND (Field3=Keyword3 ) AND (Field4!=Keyword4)).

我提到的文件是 https://dzone.com/articles/23-useful-elasticsearch-example-queries当尝试在Chrome中的感知API扩展程序中执行某些查询时,其中存在语法错误。 例如:

{
    "query": {
        "bool": {
            "must": {
                "bool" : { "should": [
                      { "match": { "title": "Elasticsearch" }},
                      { "match": { "title": "Solr" }} ] }
            },
            "must": { "match": { "authors": "clinton gormely" }},
            "must_not": { "match": {"authors": "radu gheorge" }}
        }
    }
}

它给出了“Duplicate Must。语法错误”。

你能帮忙形成我的查询吗?

感谢。

2 个答案:

答案 0 :(得分:1)

你必须在同一级别两次。试试这个

   {
        "query": {
            "bool": {
                "must": [{
                    "bool" : { "should": [
                          { "match": { "title": "Elasticsearch" }},
                          { "match": { "title": "Solr" }} ] }
                }, { "match": { "authors": "clinton gormely" }}],

                "must_not": { "match": {"authors": "radu gheorge" }}
            }
        }
    }

答案 1 :(得分:0)

正如Volodymyr的回答中所提到的,您的查询必须包含2个必须处于同一级别的错误。查看this文档以满足您的要求。

  

必须:所有这些条款必须匹配。相当于AND。

     

must_not:所有这些条款都不匹配。相当于NOT。

     

这些条款中至少有一个必须匹配。相当于OR。

     

filter:必须匹配但在非评分过滤模式下运行的子句。