Multi Match Query
multi_match查询建议在match query之上,并允许多字段查询:
GET /_search
{
"query": {
"multi_match" : {
"query": "this is a test", 【1】
"fields": [ "subject", "message" ] 【2】
}
}
}
【1】 查询字符串
【2】被查询的字段
fields
and per-field boosting
字段可以通过通配符指定,例如:
GET /_search
{
"query": {
"multi_match" : {
"query": "Will Smith",
"fields": [ "title", "*_name" ] 【1】
}
}
}
【1】查询title,first_name和last_name字段。
个别字段可以通过插入符号(^)来提升:
GET /_search
{
"query": {
"multi_match" : {
"query" : "this is a test",
"fields" : [ "subject^3", "message" ] 【1】
}
}
}
【1】subject字段是message字段的3倍。
Types of multi_match
query:
内部执行multi_match查询的方式依赖于type参数,它可以被设置成:
best_fields (默认)查找与任何字段匹配的文档,但使用最佳字段中的_score。看best_fields.
most_fields 查找与任何字段匹配的文档,并联合每个字段的_score.
cross_fields 采用相同分析器处理字段,就好像他们是一个大的字段。在每个字段中查找每个单词。看cross_fields。
phrase 在每个字段上运行match_phrase查询并和每个字段的_score组合。看phrase and phrase_prefix。
phrase_prefix 在每个字段上运行match_phrase_prefix查询并和每个字段的_score组合。看phrase and phrase_prefix。
best_fields
当你在同一个字段中搜索最佳查找的多个单词时,bese_fields类型是最有效的。例如,"brown fox"单独在一个字段中比"brown"在一个字段中和"for"在另外一个字段中更有意义。
best_fields为每一个字段生成match query并在dis_max查询中包含他们,以发现单个最匹配的字段。例如这个查询:
GET /_search
{
"query": {
"multi_match" : {
"query": "brown fox",
"type": "best_fields",
"fields": [ "subject", "message" ],
"tie_breaker": 0.3
}
}
}
也可以这样执行: