1

我正在使用以下搜索查询:

{“来自”:“0”,“大小”:“20”,“查询”:{“查询字符串”:{“字段”:[“标题”],“查询”:“卖家*”,“分析通配符”:真的}}}

这个 curl 命中以正确的分数返回给我的命中/结果,而我正在尝试通过 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();

这将针对所有命中返回具有相同分数的结果。

即使我尝试与开玩笑的客户,结果也是一样的,我没有在结果中得到正确的分数。

4

1 回答 1

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();
于 2016-06-13T14:47:47.037 回答