elasticsearch查询字符串格式

时间:2012-01-17 20:10:26

标签: elasticsearch

我正在使用

SearchBuilder.searchSource.query(query_string).buildAsBytes() 

在elasticsearch服务器上执行查询字符串。

问题是我不知道查询字符串的正确格式是什么。例如,我想找到country字段为US的所有文档,我可以使用

的restful api
http://my.elastic.search.server/foo/dummy/_search?q=country:US

得到我需要的东西。但就java api而言,我尝试了country:USq=country:US{\"country\":\"US\"},但每次我都回来SearchPhaseExecutionException

在这种情况下,ElasticSearch的文档没有说明查询字符串的格式,我已经用尽了与此主题相关的Google结果。有人可以帮我吗?谢谢!

5 个答案:

答案 0 :(得分:4)

根据您的REST查询,根据Search Java API的等效项将是:

SearchResponse response = client.prepareSearch("foo")
    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    .setQuery(termQuery("country", "US"))
    .execute()
    .actionGet();

您还可以像在REST示例中一样使用纯查询字符串:

    .setQuery(queryString("country:US"))

最佳参考是Maven repository中提供的Javadoc。

答案 1 :(得分:2)

行。好像我需要传递一个更人为的json字符串

{   “请求参数” : {          “default_field”:“anotherFoo”,          “查询”:“这个和那个或那里”   } }

我可以通过弹性搜索传递纯Lucene样式的查询。

答案 2 :(得分:2)

答案 3 :(得分:1)

这是一个古老的问题但是由于我在类似的查询中苦苦挣扎,我想我会加上我的两分钱。  首先,我找不到

SearchBuilder.searchSource.query(query_string).buildAsBytes() 

正如ES java API中原始问题中所提到的那样。

我的请求正文看起来像

{
  "query": {
    "query_string": {
      "default_field": "file",
      "query": "Java"
    }
  },
  "highlight": {
    "fields": {
      "file": {

      }
    }
  }
}

我发现这可以通过以下两种方式完成

    String queryString = "{" 
            + "\"query_string\": " 
                + "{"
                    + "\"default_field\":"
                + " \"file\","
                        + " \"query\": \"Email OR @gmail.com @yahoo.com\""
                        + "}"
                        + "}";
  

第一种方法

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();        
    searchSourceBuilder.query(queryString); //or searchSourceBuilder.query(queryString).buildAsBytes();

    SearchRequestBuilder searchRequestBuilder = new SearchRequestBuilder( ESConnectionFactory.INSTANCE.getClient()) ;
    searchRequestBuilder.internalBuilder(searchSourceBuilder).setIndices("resume")
    .setTypes("docs").addHighlightedField("file");
  

第二种方法

SearchRequestBuilder searchRequestBuilder = client.prepareSearch()
                .setIndices("resume")
                .setTypes("docs").setQuery(queryString).addHighlightedField("file");

然后标准

SearchResponse response = searchRequestBuilder.execute().actionGet();

键入要注意的事项

  1. 不要添加"查询"在queryString
  2. 请勿在查询字符串中添加突出显示的字段。使用addHighlightedField

答案 4 :(得分:1)

我觉得这应该有效。

QueryBuilder qb = QueryBuilders.queryStringQuery("pattern").field("field to search");
SearchRequestBuilder sreq = client.prepareSearch("INDEX").setTypes("TYPE").setQuery(qb);
SearchResponse response = sreq
                .setFrom("From page")
                .setSize("size")
                .execute().actionGet();