ElasticSearch Lucene使用Java API进行全文搜索

时间:2014-08-22 19:05:18

标签: java elasticsearch lucene elasticsearch-java-api booleanquery

我最近开始使用ElasticSearch。我成功地将它们集成在一起,但我发现搜索API相当复杂和令人困惑。 Java API也没有太大帮助。如何使用java api使用Lucene语法titleAND搜索以下JSON中的字段名OR

{
    "queryId": 2,
    "queryName": "beta",
        "query": {
            "lang": "en",
            "location": "pa",
            "title": "americanlegion OR concernedvets AND conversion"
      }
  }

我已经尝试boolean query,但他们不能满足我的目的。

1 个答案:

答案 0 :(得分:2)

如果你能用BoolQuery显示你尝试的内容并解释它为什么不起作用,那将是件好事。以下是使用Java API BoolQuery进行查询的示例。

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.should(QueryBuilders.termsQuery("lang", "en"));
boolQuery.should(QueryBuilders.termsQuery("location", "en"));

BoolQueryBuilder titleBoolQuery = QueryBuilders.boolQuery();
titleBoolQuery.should(QueryBuilders.termsQuery("title", new String[]{"americanlegion", "conversion"}));
titleBoolQuery.must(QueryBuilders.termQuery("title", "conversion"));

boolQuery.should(titleBoolQuery);

结果JSON:

{
    "bool" : {
        "should" : [ {
            "terms" : {
                "lang" : [ "en" ]
            }
        },{
            "terms" : {
                "location" : [ "pa" ]
            }
        },{
            "bool" : {
                "must" : {
                    "term" : {
                         "title" : "conversion"
                    }
                },
                "should" : {
                    "terms" : {
                        "title" : [ "americanlegion", "conversion" ]
                     }
                }
            }
       } ]
   }
}

修改

如果您想使用Lucene语法,请使用QueryStringQueryBuilder

QueryStringQueryBuilder query = QueryBuilders.queryString("user.name:\"John\" OR user.name:\"Matt\"");

这将产生JSON

{
    "query_string" : {
        "query" : "user.name:\"John\" OR user.name:\"Matt\""
    }
}