-
Introduction
- 入门
- 分布式集群
- 数据
- 分布式增删改查
- 搜索
- 映射和分析
- 结构化查询
- 排序
- 分布式搜索
- 索引管理
- 深入分片
- 结构化搜索
- 全文搜索
- 多字段搜索
- 模糊匹配
- Partial_Matching
- Relevance
- Language intro
- Identifying words
- Token normalization
- Stemming
- Stopwords
- Synonyms
- Fuzzy matching
-
Aggregations
-
overview
-
circuit breaker fd settings
-
filtering
-
facets
-
docvalues
-
eager
-
breadth vs depth
-
Conclusion
-
concepts buckets
-
basic example
-
add metric
-
nested bucket
-
extra metrics
-
bucket metric list
-
histogram
-
date histogram
-
scope
-
filtering
-
sorting ordering
-
approx intro
-
cardinality
-
percentiles
-
sigterms intro
-
sigterms
-
fielddata
-
analyzed vs not
-
overview
- 地理坐标点
- Geohashe
- 地理位置聚合
- 地理形状
- 关系
- 嵌套
- Parent Child
- Scaling
- Cluster Admin
- Deployment
- Post Deployment
multi_match查询
multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询。
提示:存在几种类型的multi_match查询,其中的3种正好和在"单一查询字符串"小节中"了解你的数据"单元中提到的几种类型相同:best_fields,most_fields以及cross_fields。
默认情况下,该查询以best_fields类型执行,它会为每个字段生成一个match查询,然后将这些查询包含在一个dis_max查询中。下面的dis_max查询:
{
"dis_max": {
"queries": [
{
"match": {
"title": {
"query": "Quick brown fox",
"minimum_should_match": "30%"
}
}
},
{
"match": {
"body": {
"query": "Quick brown fox",
"minimum_should_match": "30%"
}
}
},
],
"tie_breaker": 0.3
}
}
copy
可以通过multi_match简单地重写如下:
{
"multi_match": {
"query": "Quick brown fox",
"type": "best_fields", <1>
"fields": [ "title", "body" ],
"tie_breaker": 0.3,
"minimum_should_match": "30%" <2>
}
}
copy
// SENSE: 110_Multi_Field_Search/25_Best_fields.json
<1> 注意到以上的type属性为best_fields。 <2> minimum_should_match和operator参数会被传入到生成的match查询中。
在字段名中使用通配符
字段名可以通过通配符指定:任何匹配了通配符的字段都会被包含在搜索中。你可以通过下面的查询来匹配book_title,chapter_title以及section_title字段:
{
"multi_match": {
"query": "Quick brown fox",
"fields": "*_title"
}
}
copy
加权个别字段
个别字段可以通过caret语法(^)进行加权:仅需要在字段名后添加^boost,其中的boost是一个浮点数:
{
"multi_match": {
"query": "Quick brown fox",
"fields": [ "*_title", "chapter_title^2" ] <1>
}
}
copy
<1> chapter_title字段的boost值为2,而book_title和section_title字段的boost值为默认的1。