- match
- match_phrase(slop)
- multi_match(best_fields、most_fields、cross_fields)
** match **
{
"query": {
"match": {
"text": "你好"
}
}
}
会进行分词,并根据minimal_should_match控制匹配程度,然后根据Lucene的评分机制进行评分
** match_phrase **
会进行分词,然后精确匹配每一个分词分出来的token。
{
"query": {
"match_phrase": {
"content" : "我的宝马多少马力"
}
}
}
在使用match_phrase时,可以通过slop参数来控制匹配程度,当slop=1时,表示少匹配一个也满足。
{
"query": {
"match_phrase": {
"content" : {
"query" : "我的宝马多少马力",
"slop" : 1
}
}
}
}
** multi_match **
匹配多个字段,"fields" : ["title", "content"],表示title,content两个字段。
{
"query": {
"multi_match": {
"query" : "我的宝马多少马力",
"fields" : ["title", "content"]
}
}
}
当使用multi_match
的时候,可以使用best_fields
来控制匹配程度,即评分,例如
{
"query": {
"multi_match": {
"query": "我的宝马发动机多少",
"type": "best_fields",
"fields": [
"tag",
"content"
],
"tie_breaker": 0.3
}
}
}
意思就是完全匹配"宝马 发动机"的文档评分会比较靠前,如果只匹配宝马的文档评分乘以0.3的系数。
most_fields
是另一种控制评分的形式
{
"query": {
"multi_match": {
"query": "我的宝马发动机多少",
"type": "most_fields",
"fields": [
"tag",
"content"
]
}
}
}