我正在使用
SearchBuilder.searchSource.query(query_string).buildAsBytes()
在elasticsearch服务器上执行查询字符串。
问题是我不知道查询字符串的正确格式是什么。例如,我想找到country
字段为US
的所有文档,我可以使用
http://my.elastic.search.server/foo/dummy/_search?q=country:US
得到我需要的东西。但就java api而言,我尝试了country:US
,q=country:US
和{\"country\":\"US\"}
,但每次我都回来SearchPhaseExecutionException
。
在这种情况下,ElasticSearch的文档没有说明查询字符串的格式,我已经用尽了与此主题相关的Google结果。有人可以帮我吗?谢谢!
答案 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)
我最近写了这个主题的概述:
http://karussell.wordpress.com/2012/01/19/birds-eye-view-on-elasticsearch-its-query-dsl/
答案 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();
键入要注意的事项
答案 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();