【发布时间】:2021-03-22 07:22:46
【问题描述】:
我正在使用弹性搜索并尝试在字段中查找子字符串。例如 - 在 stack overflow 中搜索字符串 tac 。我为此使用 MultiMatchQuery,但它不起作用。这是我的代码的 sn-p(first_name 是字段名称)。
searchString = "*" + searchString.toLowerCase() + "*";
MultiMatchQueryBuilder mqb = new MultiMatchQueryBuilder("irs", first_name);
mqb.type(MultiMatchQueryBuilder.Type.PHRASE);
BoolQueryBuilder searchQuery = boolQuery();
searchQuery.should(mqb);
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
queryBuilder.withQuery(searchQuery);
NativeSearchQuery query = queryBuilder.build();
当我搜索 tac 时,它不会返回任何结果。当我搜索 stack 或 overflow 时,它确实返回 stack overflow。
所以它会寻找确切的字符串。我尝试使用MultiMatchQueryBuilder.Type.PHRASE_PREFIX,但它会查找以子字符串开头的短语。它适用于 stac 或 overf 等字符串,但不适用于 tac 或 tack。
关于如何修复它的任何建议?
【问题讨论】:
-
它返回什么?怎么不行?
-
@BalázsNémeth 更新了描述
-
@NikhiR,你有机会看我的回答吗?如果有帮助,请点赞并接受答案。
标签: java elasticsearch elasticsearch-5