MyElasticsearch
  • Introduction
  • 基本查询
  • 简介
  • 安装
    • Window下安装
  • 基础知识
    • 理解 document
    • 简单的集群管理
    • 简单实例:简单的curd操作
    • 简单实例:批量curd操作
    • 简单实例:多种搜索方式
    • 简单实例:聚合分析
    • 附录: _index,_type,_id,_source元数据
    • 附录:手动&自动生成document id
    • 附录:全量替换、强制创建、lazy delete机制
    • 附录:search timeout机制
    • _source && _all
  • 倒排索引
  • 查询附录
    • 分页搜索
    • multi-index&multi-type搜索模式
  • 查询
    • 测试数据
    • 简单查询
    • 基本查询
      • Term,Terms,Wildcard查询
        • Term查询
        • Terms查询
      • match相关查询
      • query_string查询
      • prefix前缀查询
      • fuzzy相关查询
        • fuzzy_like_this查询
        • fuzzy_like_this_field查询
        • fuzzy查询
    • 复合查询
  • groovy脚本
    • 执行部分更新(partial update)
  • 锁机制(悲观锁、乐观锁)
    • 基于_version乐观锁并发控制
    • 基于external version乐观锁并发控制
  • 查询方式
    • Query string方式
    • Query DSL 方式
    • query filter 方式
    • 各种query搜索语法
    • 多搜索条件组合查询
    • 检验不合法的Quqery查询
    • 搜索结果的排序规则
    • field索引两次来解决字符串排序
    • 使用scoll滚动搜索
    • 分词器
  • document mapping
    • 自动mapping带来的问题
    • field类型
    • mapping中的field type类型
    • 定制化dynamic mapping策略
  • 资料
  • 原理
    • 相关度评分TF&IDF算法
    • doc values 正排索引
  • 索引的CURD
  • 附录:基于scoll+bulk+索引别名实现零停机重建索引
Powered by GitBook
On this page
  • 测试数据
  • 查询语句
  • 参数
  • 针对多字段的query_string查询
  • simple_query_string 查询

Was this helpful?

  1. 查询
  2. 基本查询

query_string查询

相比其他可用的查询,query_string查询支持全部的Apache Lucene查询语法。

测试数据

curl -XPOST  'http://localhost:9200/_bulk?pretty=true' -d '
{ "index": {"_index": "library", "_type": "book", "_id": "1"}}
{ "title": "All Quiet on the Western Front","otitle": "Im Westen nichts Neues","author": "Erich Maria Remarque","year": 1929,"characters": ["Paul Bäumer", "Albert Kropp", "Haie Westhus", "Fredrich Müller", "Stanislaus Katczinsky", "Tjaden"],"tags": ["novel"],"copies": 1, "available": true, "section" : 3}
{ "index": {"_index": "library", "_type": "book", "_id": "2"}}
{ "title": "Catch-22","author": "Joseph Heller","year": 1961,"characters": ["John Yossarian", "Captain Aardvark", "Chaplain Tappman", "Colonel Cathcart", "Doctor Daneeka"],"tags": ["novel"],"copies": 6, "available" : false, "section" : 1}
{ "index": {"_index": "library", "_type": "book", "_id": "3"}}
{ "title": "The Complete Sherlock Holmes","author": "Arthur Conan Doyle","year": 1936,"characters": ["Sherlock Holmes","Dr. Watson", "G. Lestrade"],"tags": [],"copies": 0, "available" : false, "section" : 12}
{ "index": {"_index": "library", "_type": "book", "_id": "4"}}
{ "title": "Crime and Punishment","otitle": "Преступлéние и наказáние","author": "Fyodor Dostoevsky","year": 1886,"characters": ["Raskolnikov", "Sofia Semyonovna Marmeladova"],"tags": [],"copies": 0, "available" : true}
'

查询语句

curl -XGET  'http://localhost:9200/library/book/_search?pretty=true' -d '{
  "query": {
    "query_string": {
      "query":  "title:crime^10 +title:punishment -otitle:cat +author: (+Fyodor +dostoevsky)",
      "default_field" : "title"
    }
  }
}'
//结果相同
curl -XGET  'http://localhost:9200/library/book/_search?pretty=true' -d '{
  "query": {
    "query_string": {
      "query":  "title:crime^10 +title:punishment -otitle:cat +author: (+Fyodor +dostoevsky)"
    }
  }
}'

解释: 1. 得到title字段中包含crime词条的文档,并且这些文档应该有10的加权。 2. 接下来文档title中包含punishment,而在otitle不包含cat。 3. 最后文档的author字段中包含Fyodor和dostoevsky关键词。

参数

  1. query:此参数指定查询文本。

  2. default_field:此参数指定默认的查询字段,默认值由index.query.default_field属性指定,默认为_all

针对多字段的query_string查询

针对多个字段做query_string查询,查询主体中提供一个fields参数,它是持有字段名称的数组。有两种方法针对多个字段运行query_string查询。

解释:针对title和otitle字段中包含crime punishment Neues三个关键词其中一个时均可匹配文档。

方法1: 最大分查询

curl -XGET  'http://localhost:9200/library/book/_search?pretty=true' -d '{
  "query": {
    "query_string": {
      "query":  "crime punishment Neues",
      "fields" :  ["title", "otitle"],
      "use_dis_max": true
    }
  }
}'

方法2:multi_match 查询

curl -XGET  'http://localhost:9200/library/book/_search?pretty=true' -d '{
  "query": {
    "multi_match": {
       "query":  "crime punishment Neues",
       "fields" :  ["title", "otitle"]
    }
  }
}'

simple_query_string 查询

simple_query_string查询同样支持Lucene查询语法;不同的是simple_query_string查询在解析查询query错误时不会抛出异常。

比如下面语句 故意将-otitle前面的空格去掉,造成query错误,但是运行查询语句,不会抛出异常。

curl -XGET  'http://localhost:9200/library/book/_search?pretty=true' -d '{
  "query": {
    "simple_query_string": {
      "query":  "title:crime^10 +title:punishment-otitle:cat +author: (+Fyodor +dostoevsky)",
      "default_operator" : "and"
    }
  }
}'
Previousmatch相关查询Nextprefix前缀查询

Last updated 6 years ago

Was this helpful?