GET _cat/indices

GET hotel/_search

GET /_search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "lvg_mc": "酒店"
        }
      },
      "boost": 1.2
    }
  }
}

DELETE /my_index 

PUT /my_index
{ "settings": { "number_of_shards": 1 }} 

POST /my_index/_bulk
{ "index": { "_id": 1 }}
{ "title": "The quick brown fox" }
{ "index": { "_id": 2 }}
{ "title": "The quick brown fox jumps over the lazy dog" }
{ "index": { "_id": 3 }}
{ "title": "The quick brown fox jumps over the quick dog" }
{ "index": { "_id": 4 }}
{ "title": "Brown fox brown dog" }

GET /my_index/_search
{
  "query": {
    "match": {
      "title": "QUICK!"
    }
  }
}

DELETE my_index

查询所有数据

GET hotel/_search
{
   "_source": ["xm","lvg_mc","sex_dic"], 
  "query": {
    "match_all": {}
  }
  , "size": 100
}

match query 指定分词方式,控制匹配精度

GET hotel/_search
{
  "_source": ["xm","lvg_mc","sex_dic"], 
  "query": {
    "match": {
      "lvg_mc": {
        "query": "如家 酒店 赣州",
        "minimum_should_match": "75%",
        "analyzer": "ik_smart"
      }
    }
  }
}

查询包含 如家 酒店 国际 赣州的数据

必须包含酒店和国际。

调整权重,如果包含赣州,分数更高一些,排名调整到前面

如果包含如家,则比赣州的得分更高一些 排名更靠前
GET hotel/_search
{
  "_source": ["xm","lvg_mc","sex_dic"], 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "lvg_mc": {
              "query": "酒店国际",
              "analyzer": "ik_smart"
            }
          }
        }
      ],
      "should": [
        {
          "match": {
            "lvg_mc": {
              "query": "如家",
              "analyzer": "ik_smart",
              "boost": 3
            }
          }
        },
        {
          "match": {
            "lvg_mc": {
              "query": "赣州",
              "analyzer": "ik_smart",
              "boost": 2
            }
          }
        }
      ]
    }
  }
}



GET _analyze
{
  "analyzer": "ik_smart",
  "text": "酒店国际"
}
可以使用 validate-query API 查看 会如何进行查询

+代表必须包含 ()代表可选包含 ^代表额外得分

GET hotel/_validate/query?explain
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "lvg_mc": {
              "query": "酒店国际",
              "analyzer": "ik_smart"
            }
          }
        }
      ],
      "should": [
        {
          "match": {
            "lvg_mc": {
              "query": "如家",
              "analyzer": "ik_smart",
              "boost": 3
            }
          }
        },
        {
          "match": {
            "lvg_mc": {
              "query": "赣州",
              "analyzer": "ik_smart",
              "boost": 2
            }
          }
        }
      ]
    }
  }
}

#默认分析器
虽然我们可以在字段层级指定分析器,但是如果该层级没有指定任何的分析器,那么我们如何能确定这个字段使用的是哪个分析器呢?

分析器可以从三个层面进行定义:按字段(per-field)、按索引(per-index)或全局缺省(global default)。Elasticsearch 会按照以下顺序依次处理,直到它找到能够使用的分析器。索引时的顺序如下:

字段映射里定义的 analyzer ,否则
索引设置中名为 default 的分析器,默认为
standard 标准分析器
在搜索时,顺序有些许不同:

查询自己定义的 analyzer ,否则
字段映射里定义的 analyzer ,否则
索引设置中名为 default 的分析器,默认为
standard 标准分析器
有时,在索引时和搜索时使用不同的分析器是合理的。我们可能要想为同义词建索引(例如,所有 quick 出现的地方,同时也为 fast 、 rapid 和 speedy 创建索引)。但在搜索时,我们不需要搜索所有的同义词,取而代之的是寻找用户输入的单词是否是 quick 、 fast 、 rapid 或 speedy 。

为了区分,Elasticsearch 也支持一个可选的 search_analyzer 映射,它仅会应用于搜索时( analyzer 还用于索引时)。还有一个等价的 default_search 映射,用以指定索引层的默认配置。

如果考虑到这些额外参数,一个搜索时的 完整 顺序会是下面这样:

查询自己定义的 analyzer ,否则
字段映射里定义的 search_analyzer ,否则
字段映射里定义的 analyzer ,否则
索引设置中名为 default_search 的分析器,默认为
索引设置中名为 default 的分析器,默认为
standard 标准分析器