弹性搜索查询字符串java api为所有结果提供相同的分数

时间:2016-06-13 14:35:13

标签: elasticsearch jest

我使用以下搜索查询:

{" from":" 0"," size":" 20"," query":{ " QUERY_STRING" :{" fields" :["标题"],"查询" :"卖家*"," analyze_wildcard":true}}}

这个卷曲命中以适当的分数返回我的命中/结果,而我通过elasticsearch运输客户端尝试相同,如:

String queryString = "{" 
           + "\"query_string\" : {\n" + 
           "       \"fields\" : [\"title\"],\n" + 
           "       \"query\" : "+ "\"" + searchQuery  + "\",\n" + 
           "       \"analyze_wildcard\": true \n" + 
           "   }}\n";

SearchResponse response2 = client.prepareSearch(indexName).setTypes(successZoneTypeName).setFrom(0).setSize(30).setQuery(QueryBuilders.queryStringQuery(queryString)).get();

这会针对所有匹配返回相同分数的结果。

即使我尝试使用jest客户端,结果也一样,但我没有在结果中获得正确的分数。

1 个答案:

答案 0 :(得分:2)

这不是通过Java构建查询字符串查询的正确方法。你应该这样做:

QueryBuilder qs = QueryBuilders.queryStringQuery("\"" + searchQuery  + "\"")
   .field("title")
   .analyzeWildcard(true);

SearchResponse response2 = client.prepareSearch(indexName)
   .setTypes(successZoneTypeName)
   .setFrom(0)
   .setSize(30)
   .setQuery(qs)
   .get();