0

我正在寻找有关使用通配符进行精确短语搜索的帮助。

QueryBuilders.multiMatchQuery("Java Se", "title", "subtitle")
    .type(MatchQueryBuilder.Type.PHRASE_PREFIX);

上面的查询,返回以下结果。

1) Java 搜索 2) 弹性 Java 搜索

尾随通配符有效。

但是,当我像下面的查询一样搜索时,

QueryBuilders.multiMatchQuery("ava Se", "title", "subtitle")
    .type(MatchQueryBuilder.Type.PHRASE_PREFIX);

它不会返回任何内容,因为没有任何内容与“ava Se”完全匹配。我期待与上述相同的结果。

前导通配符不起作用。有没有办法做到这一点?

谢谢, Baskar.S

4

2 回答 2

1

如果您查看“Type.PHRASE_PREFIX”的 javadoc,您会看到只有字符串中的最后一个术语用作前缀,因此在您的情况下只有“Se”。

我在我的索引中尝试了这个查询并且它有效: .setQuery(QueryBuilders.matchQuery("body", "(.*?)ing the").type(MatchQueryBuilder.Type.PHRASE_PREFIX))

它返回的文件包含诸如“我们正在加强提案……”、“通过使用……”之类的短语。

于 2016-01-21T21:10:22.577 回答
0

您需要使用nGram分析器,甚至edgeNGram会是一个更好的主意。一旦你这样做了,你的索引可能有点重,但词缀搜索在没有通配符的情况下也能正常工作。

于 2015-04-10T05:30:44.830 回答