我们说我已将这样的文件编入索引:
{
"_index": "indexapm",
"_type": "membres",
"_id": "3708",
"_score": 1,
"_source": {
"firstname": "John",
"lastname": "GUERET-TALON"
}
}
我想在搜索" GUER"," GUERET"," TAL"例如。
我有一个Java应用程序,我试过这个:
MoreLikeThisQueryBuilder qb = QueryBuilders.moreLikeThisQuery(
"firstname^3",
"lastname^3")
.likeText("GUER");
SearchResponse response = client.prepareSearch("myindex")
.setTypes("mytype")
.setSearchType(SearchType.DFS_QUERY_AND_FETCH)
.setQuery(qb) // Query
.setFrom(0)
.setSize(limit)
.setExplain(true)
.execute()
.actionGet();
但是此搜索无法检索我的文档。当然,如果我尝试完全匹配查询并搜索" GUERET",它可以工作。
有谁知道我必须使用哪种查询以及如何使它与Java库一起使用?谢谢!
答案 0 :(得分:0)
在这种情况下,更像此查询并不是最佳选择。
如果您正如您所描述的那样,您使用首字母单词查找文档,则应使用前缀查询,但它们仅限于一个字段。要搜索多个字段,请使用MultiMatch Query(提供PHRASE_PREFIX
类型)。我会尝试类似的东西:
QueryBuilders.multiMatchQuery("GUER", "firstname", "lastname")
.type(MatchQueryBuilder.Type.PHRASE_PREFIX);
答案 1 :(得分:0)
QueryBuilders.boolQuery().should(QueryBuilders.wildcardQuery("lastname", "*GUER*"));
我使用WildcardQueryBuilder获得了结果,它生成了以下内容:
{"bool":{"should":[{"wildcard":{"firstname":"*GUER*"}}]}}