短语搜索概念
Match_phrase查询是一种短语查询,它用于匹配包含指定短语的文档。与Match查询不同,Match_phrase查询只匹配包含短语的文档,而不会匹配单个词条。
匹配规则
**会分词:**match_phrase首先会将查询短语拆分为单个词项。例如,如果查询短语是“elastic org cn”,则将其拆分为三个词项:。
**必须全部匹配且顺序必须相同:**被检索字段必须包含match_phrase短语中的所有词项,并且顺序必须是相同的。比如查询短语是elasticorgcn,那么只有字段中的词项必须包含"elastic"、"org"和"cn"这三个短语,切顺序不能颠倒。
**Slop距离:**默认情况下被检索字段包含的match_phrase中的词项之间不能有其他词项,即slop默认为0,如果人为将slop设置为其他数值,则多个词项将允许有slop规定的距离
GET products/_search
{
"query":{
"match_phrase":{
"name":{
"query":"",
"slop": 0
}
}
}
}
使用语法
Slop参数
在Elasticsearch的Match_phrase查询中,slop参数用于指定允许查询短语中各个词项之间的最大间隔数。它可以用来放宽查询短语中词项的严格顺序要求,从而使查询结果能够匹配更多的文档。
slop参数可以设置为一个非负整数,默认值为0,表示查询短语中的词项必须以查询短语中的相同顺序连续出现。当slop参数大于0时,查询短语中的词项可以以指定的最大间隔数任意顺序出现。例如,如果slop参数设置为1,则查询短语中的相邻两个词项可以最多间隔一个单词。
使用slop参数时需要注意以下几点:
slop参数只适用于Match_phrase查询,不适用于Match_phrase_prefix查询
slop参数的值越大,匹配的文档数就越多,同时查询的性能也会下降,相关度也可能下降。