1. match_bool_prefix查询
match_bool_prefix查询会analyze其输入,并根据这些 term 构造一个bool查询。term查询中使用除最后一个词以外的每个term。最后一项在前缀查询中使用。 match_bool_prefix查询,例如
GET /_search
{
"query": {
"match_bool_prefix" : {
"message" : "quick brown f"
}
}
}
等价于
GET /_search
{
"query": {
"bool" : {
"should": [
{ "term": { "message": "quick" }},
{ "term": { "message": "brown" }},
{ "prefix": { "message": "f"}}
]
}
}
}
match_bool_prefix查询和match_phrase_prefix之间的重要区别是match_phrase_prefix查询将其 term 作为短语进行匹配,但是match_bool_prefix查询可以在任何位置匹配其 term 。上面的示例match_bool_prefix查询可以匹配包含quich brown fox 的字段,但也可以 brown fox quick 。它也可以匹配出现在任何位置的包含“fast”,“brown”和以f开头的 term 的字段。
1.1. 参数
默认情况下,将使用 analyzer 从查询字段的 mapping 中analyzematch_bool_prefix查询的输入文本。可以使用 analyzer 参数配置其他搜索 analyzer
GET /_search
{
"query": {
"match_bool_prefix": {
"message": {
"query": "quick brown f",
"analyzer": "keyword"
}
}
}
}
match_bool_prefix查询支持对match查询所述的minimum_should_match和operator参数,并将设置应用于构造的布尔查询。在大多数情况下,构造的布尔查询中的子句数将是通过analyze查询文本产生的 term 数。
模糊性,prefix_length,max_expansions,fuzzy_transpositions和Fuzzy_rewrite参数可以应用于为除最终 term 以外的所有 term 构造的 term 子查询。它们对为最终 term 构造的前缀查询没有任何影响。
2. 短语查询
就是查询的词必须是按照顺序连着的
GET /_search
{
"query": {
"match_phrase": {
"message": "this is a test"
}
}
}
对应的参数可以有
slop: 这个参数设置了连个term之间可以间隔几个term,默认为0,就是term必须是连着的
analyzer: 查询分词器
2.1 phrase_prefix_query
短语前缀查询
GET /_search
{
"query": {
"match_phrase_prefix": {
"message": {
"query": "quick brown f"
}
}
}
}
query: 查询语句
analyzer: 查询分词器
max_expansions: 前缀查询最多匹配到的term的数量
slop: 在两个matching的term中间最多有slop个term,默认为0
zero_terms_query: 如果query都是停用词怎么办,none,就不会有结果, all,等价match_all搜索
相对而言,使用search_as_you_type 和completion suggester可能会有更好的效果