使用ElasticSearch怎么实现全文搜索

使用ElasticSearch 怎么实现全文搜索,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联于2013年创立,是专业互联网技术服务公司,拥有项目成都做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元沙依巴克做网站,已为上家服务,为沙依巴克各地企业和个人服务,联系电话:13518219792

match query 会对查询语句进行分词,分词后,如果查询语句中的任何一个词项被匹配,则文档就会被索引到。

GET books/_search
{
  "query": {
    "match": {
      "name": "美术计算机"
    }
  }
}
 

这个查询首先会对 美术计算机 进行分词,分词之后,再去查询,只要文档中包含一个分词结果,就回返回文档。换句话说,默认词项之间是 OR 的关系,如果想要修改,也可以改为 AND。

GET books/_search
{
  "query": {
    "match": {
      "name": {
        "query": "美术计算机",
        "operator": "and"
      }
    }
  }
}
 

此时就回要求文档中必须同时包含 美术计算机两个词。

 

15.2 match_phrase query

match_phrase query 也会对查询的关键字进行分词,但是它分词后有两个特点:

  • 分词后的词项顺序必须和文档中词项的顺序一致
  • 所有的词都必须出现在文档中

示例如下:

GET books/_search
{
  "query": {
    "match_phrase": {
        "name": {
          "query": "十一五计算机",
          "slop": 7
        }
    }
  }
}
 

query 是查询的关键字,会被分词器进行分解,分解之后去倒排索引中进行匹配。

slop 是指关键字之间的最小距离,但是注意不是关键之间间隔的字数。文档中的字段被分词器解析之后,解析出来的词项都包含一个 position 字段表示词项的位置,查询短语分词之后 的 position 之间的间隔要满足 slop 的要求。

 

15.3 match_phrase_prefix query

这个类似于 match_phrase query,只不过这里多了一个通配符,match_phrase_prefix 支持最后一个词项的前缀匹配,但是由于这种匹配方式效率较低,因此大家作为了解即可。

GET books/_search
{
  "query": {
    "match_phrase_prefix": {
      "name": "计"
    }
  }
}
 

这个查询过程,会自动进行单词匹配,会自动查找以开始的单词,默认是 50 个,可以自己控制:

GET books/_search
{
  "query": {
    "match_phrase_prefix": {
      "name": {
        "query": "计",
        "max_expansions": 3
      }
    }
  }
}
 

match_phrase_prefix 是针对分片级别的查询,假设 max_expansions 为 1,可能返回多个文档,但是只有一个词,这是我们预期的结果。有的时候实际返回结果和我们预期结果并不一致,原因在于这个查询是分片级别的,不同的分片确实只返回了一个词,但是结果可能来自不同的分片,所以最终会看到多个词。

 

15.4 multi_match query

match 查询的升级版,可以指定多个查询域:

GET books/_search
{
  "query": {
    "multi_match": {
      "query": "java",
      "fields": ["name","info"]
    }
  }
}
 

这种查询方式还可以指定字段的权重:

GET books/_search
{
  "query": {
    "multi_match": {
      "query": "阳光",
      "fields": ["name^4","info"]
    }
  }
}
 

这个表示关键字出现在 name 中的权重是出现在 info 中权重的 4 倍。

 

15.5 query_string query

query_string 是一种紧密结合 Lucene 的查询方式,在一个查询语句中可以用到 Lucene 的一些查询语法:

GET books/_search
{
  "query": {
    "query_string": {
      "default_field": "name",
      "query": "(十一五) AND (计算机)"
    }
  }
}
   

15.6 simple_query_string

这个是 query_string 的升级,可以直接使用 +、|、- 代替 AND、OR、NOT 等。

GET books/_search
{
  "query": {
    "simple_query_string": {
      "fields": ["name"],
      "query": "(十一五) + (计算机)"
    }
  }
}
 

看完上述内容,你们掌握使用ElasticSearch 怎么实现全文搜索的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


本文题目:使用ElasticSearch怎么实现全文搜索
文章起源:http://ybzwz.com/article/gdshjd.html