Elasticsearch 全文搜索

1,匹配查询(match)

  • match查询主要的应用场景是进行全文搜索;
// 1,初始化数据
DELETE /my_index 

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

POST /my_index/my_type/_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" }

// 2,match 单个词查询
GET /my_index/my_type/_search
{
  "query":{
    "match":{
      "title":"QUICK!"
    }
  }
}

// 3,match 多词查询
GET /my_index/my_type/_search
{
  "query":{
    "match":{
      "title":"BROWN DOG!"
    }
  }
}

// 3.1 operator 操作符,默认值为or
GET /my_index/my_type/_search
{
  "query":{
    "match":{
      "title":{
        "query":"BROWN DOG!",
        "operator":"and"

      }
    }
  }
}

// 3.2 minimum_should_match 最小匹配参数
GET /my_index/my_type/_search
{
  "query":{
    "match":{
      "title":{
        "query":"quick brown dog",
        "minimum_should_match": "75%"

      }
    }
  }
}

2,组合查询

// 组合查询
GET /my_index/my_type/_search
{
  "query":{
    "bool":{
      "must":{"match":{"title":"quick"}},
      "must_not":{"match":{"title":"lazy"}},
      "should":[
        {"match":{"title":"brown"}},
        {"match":{"title":"dog"}}
        ]
    }
  }
}

// 备注:should语句,一个文档不必包含“brown”或“dog”这两个词项,但如果一旦包含,它的相关性会提高。

// 控制精度(minimum_should_match)
GET /my_index/my_type/_search
{
  "query":{
    "bool":{
      "should":[
        {"match":{"title":"brown"}},
        {"match":{"title":"fox"}},
        {"match":{"title":"dog"}}
        ],
        "minimum_should_match": 2
    }
  }
}

3,查询语句提升权重

// boost 控制查询语句的相对权重,默认值为1,大于1会提升一个语句的相对权重
GET /_search
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "content": {
                        "query":    "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [
                { "match": {
                    "content": {
                        "query": "Elasticsearch",
                        "boost": 3
                    }
                }},
                { "match": {
                    "content": {
                        "query": "Lucene",
                        "boost": 2
                    }
                }}
            ]
        }
    }
}

4,控制分析

// 1,新增字段,并配置分析器
PUT /my_index/_mapping/my_type
{
    "my_type": {
        "properties": {
            "english_title": {
                "type":     "text",
                "analyzer": "english"
            }
        }
    }
}

// 2,validate-query API 分析查询过程
GET /my_index/my_type/_validate/query?explain
{
  "query":{
    "bool":{
      "should":[
        {"match":{"title":"Foxes"}},
        {"match":{"english_title": "Foxes"}}
        ]
    }
  }
}

参考资料:
-FORBIDDEN/12/index read-only / allow delete (api)

原文地址:https://www.cnblogs.com/linkworld/p/12030686.html

时间: 2024-10-10 10:44:20

Elasticsearch 全文搜索的相关文章

[Elasticsearch] 全文搜索 (一) - 基础概念和match查询

全文搜索(Full Text Search) 现在我们已经讨论了搜索结构化数据的一些简单用例,是时候开始探索全文搜索了 - 如何在全文字段中搜索来找到最相关的文档. 对于全文搜索而言,最重要的两个方面是: 相关度(Relevance) 查询的结果按照它们对查询本身的相关度进行排序的能力,相关度可以通过TF/IDF,参见什么是相关度,地理位置的邻近程度(Proximity to a Geo-location),模糊相似性(Fuzzy Similarity)或者其它算法进行计算. 解析(Analys

[Elasticsearch] 全文搜索 (二) - 多词查询及查询的合并

多词查询(Multi-word Queries) 如果我们一次只能搜索一个词,那么全文搜索就会显得相当不灵活.幸运的是,通过match查询来实现多词查询也同样简单: GET /my_index/my_type/_search { "query": { "match": { "title": "BROWN DOG!" } } } 以上的查询会返回所有的四份文档: { "hits": [ { "_id

[Elasticsearch] 全文搜索 (四) - 控制分析及相关度

控制分析(Controlling Analysis) 查询只能摘到真实存在于倒排索引(Inverted Index)中的词条(Term),因此确保相同的分析过程会被适用于文档的索引阶段和搜索阶段的查询字符串是很重要的,这样才能够让查询中的词条能够和倒排索引中的词条匹配. 尽管我们说的是文档(Document),解析器(Analyzer)是因字段而异的(Determined per Field).每个字段都能够拥有一个不同的解析器,通过为该字段配置一个特定的解析器或者通过依赖类型(Type),索引

[Elasticsearch] 全文搜索 (三) - match查询和bool查询的关系,提升查询子句

match查询是如何使用bool查询的 现在,你也许意识到了使用了match查询的多词查询只是简单地将生成的term查询包含在了一个bool查询中.通过默认的or操作符,每个term查询都以一个k语句被添加,所以至少一个should语句需要被匹配.以下两个查询是等价的: { "match": { "title": "brown fox"} } { "bool": { "should": [ { "

Elasticsearch 全文搜索和keyword search字段的mapping定义

在ES5.0之前我们对于需要keyword search的字段都是这样定义的: { "field name":{ "type": "string", "index": "not_analyzed" } } 全文检索: { "field name":{ "type": "string" } } ES 5+: keyword search: { &qu

全文搜索之 Elasticsearch

概述 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的. 特性 安装方便:没有其他依赖,下载后安装非常方便:只用修改几个参数就可以搭建起来一个集群 JSON:输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便 RESTful:基本所有操作(索引.查询.甚至是配置)都可以通过 HTTP 接口进行 分布式:节点对外表现对等(每个节点都可以用来做入口):加入节点自动均衡 多租户

全文搜索存储引擎 Elasticsearch 一点点

开始请大家想一个问题,如何统计一个Web站点的有效PV? 针对用户请求的URL,统计时做模式匹配-------->即用户真正去打开一个站点的有效页面并对每个页面的入口的访问做一个统计浏览量: 简要搜索引擎 搜索引擎在互联网上特别多有专业(Startpage,Google,Yahoo,Baidu)等也有非专业开源(北大搜索.任何基于Lucene库的二次开发搜索代理引擎)等:其重点都是用来做海量数据搜索存储.分析,并且根据用户指定的filter来过滤出用户所需要的数据.而背后所需基础组件无外乎是 索

ASP.NET Web API + Elasticsearch 6.x 快速做个全文搜索

最近想做个全文搜索,设想用 ASP.NET Web API + Elasticsearch 6.x 来实现. 网上搜了下 Elasticsearch 的资料,大部分是讲 linux 平台下如何用 java 来开发,有少量讲在 windows 平台下用 c# 开发的,且版本是 Elasticsearch 5.x .无奈上官网撸串,这里梳理下官网的教程,希望对大家有所帮助. 一.Elasticsearch 的安装 下载  MSI(https://artifacts.elastic.co/downlo

ElasticSearch基础3:全文搜索

全文搜索 所有查询会或多或少的执行相关度计算,但不是所有查询都有分析阶段.和一些特殊的完全不会对文本进行操作的查询(如 bool 或 function_score )不同,文本查询可以划分成两大家族: 基于词项的查询 如 term 或 fuzzy 这样的底层查询不需要分析阶段,它们对单个词项进行操作.用 term 查询词项 Foo 只要在倒排索引中查找 准确词项 ,并且用 TF/IDF 算法为每个包含该词项的文档计算相关度评分 _score .记住 term 查询只对倒排索引的词项精确匹配,这点