Match Phrase Prefix Query
国内对于 Elasticsearch 深入的人并不多,或者大多数大牛不屑于分享关于 Elasticsearch 的知识,这里讲讲 Elasticsearch 中的 Constant Score Query
关于
概念
match_phrase_prefix与match_phrase相同,但是它多了一个特性,就是它允许在文本的最后一个词项(term)上的前缀匹配,如果
是一个单词,比如a,它会匹配文档字段所有以a开头的文档,如果是一个短语,比如 "this is ma" ,则它会先进行match_phrase查询,找出
所有包含短语"this is"的的文档,然后在这些匹配的文档中找出所有以"ma"为前缀的文档.
语法
POST /my_index/my_type/_search
{
"query": {
"match_phrase_prefix": {
"title": {
"query": "this is r",
"analyzer": "standard",
"max_expansions": 10,
"slop":2,
"boost":100
}
}
}
}
参数说明
- analyzer 指定何种分析器来对该短语进行分词处理
- max_expansions 控制最大的返回结果
- boost 用于设置该查询的权重
- slop 允许短语间的词项(term)间隔
一般来说,match_phrase_prefix 可以实现比较粗糙的自动建议(Suggest).
Java API
@Test
public void test() throws Exception {
String key = "this is a";
MatchPhrasePrefixQueryBuilder matchPhrasePrefixQueryBuilder = QueryBuilders.matchPhrasePrefixQuery("title",key);
matchPhrasePrefixQueryBuilder.boost(10);
matchPhrasePrefixQueryBuilder.analyzer("standard");
matchPhrasePrefixQueryBuilder.slop(2);
matchPhrasePrefixQueryBuilder.maxExpansions(100);
SearchResponse searchResponse = client.prepareSearch()
.setIndices("my_index")
.setTypes("my_type")
.setQuery(matchPhrasePrefixQueryBuilder)
.execute()
.actionGet();
System.out.println(ResponseUtil.parse(searchResponse));
}
更多关于 Java API,请参考:MatchPhrasePrefixQueryDemo
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于