概要
前面的match查询只能告诉我们,搜索的文档里有这些关键词,但无法告知词语之间的顺序,而不同的词语顺序表达的意思可能完全相反。我们想要的,是跟我们期望搜索的语义要相似,这就需要短语匹配和近似匹配来控制了。
短语搜索
短语搜索即把一小段话完完整整地进行搜索,必须保证被搜索的文档内有一模一样的才行,如下:
GET /music/children/_search
{
"query": {
"match_phrase": {
"content": "in the morning"
}
}
}
Elasticsearch对短语搜索必须要满足如下要求:
- in the morning 三个单词必须要全部出现
- the的位置比in大1
- morning的位置比the大1
任何一个不成立,则搜索不到匹配的结果。意思上是说,短语搜索除了关注关键词是否出现,还关心被搜索文档中这几个关键词的位置,我们可以用调度命令看一下词条的位置:
GET /_analyze
{
"analyzer":"standard",
"text": "in the morning"
}
响应结果:
{
"tokens": [
{
"token": "in",
"start_offset": 0,
"end_offset": 2,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "the",
"start_offset": 3,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "morning",
"start_offset": 7