首页 > 其他分享 >Elastic Search term, match, match_phrase 和 match_phrase_prefix 查询时的区别

Elastic Search term, match, match_phrase 和 match_phrase_prefix 查询时的区别

时间:2024-04-11 15:37:24浏览次数:23  
标签:brown Search fox quick phrase 分词 match

字段类型分 keyword (不分词) 和 text (分词)
字段值为 "quick brown fox", 详细的create index 和 insert data 语句在后边

注意:keyword类型字段不分词,text类型字段
keyword类型的字段值就是 "quick brown fox",不分词,必须当成一个整体
text类型的字段值是 "quick brown fox",分词,可以当成一个有序list ["quick", "brown", "fox"]

按照字段值类型来分:
一、keyword类型字段值不分词,term, match, match_phrase查询语句必须与字段值完全匹配
例如查询语句必须是 ["quick brown fox"] 才能查出来,["quick", "brown", "fox"]中的任何一个值都不行。
二、text字段值分词
1. term查询语句不分词,因此查询语句必须是text字段分词之后的某一个才行。
例如查询语句必须是 ["quick", "brown", "fox"] 中的某一个才行。而["quick brown", "quick brown fox", "quick " ] 中的任务一个不行,包括 "quick brown fox" 和 "quick "(因为有个空格,term不对对查询语句分词,其值包含空格,而数据分词后不带空格,导致不匹配)
2. match查询语句分词, 因此查询语句分词后和字段值分词后的结果的交集不为空,就可以查询出来。
例如查询语句 ["quick", "brown", "fox", "quick ", "quick brown fox", "a brown b", "fox quick"] 中的任何一个都行。
3. match_phrase查询语句分词,加上顺序原因,因此查询语句必须是index字段值的一部分才行。类似于python中的list,必须是其中的一个连续切片就行。也可以理解为字符串的字串,但是单词不能截断。
例如查询语句 ["quick", "brown", "fox", "quick ", "quick brown fox", " brown fox"] 中的任何一个都行。
但是, ["fox quick", "quick brown f", "quick fox"]不行。fox quick是因为顺序不同,也就是不是其中的字串; "quick fox"不行因为中间漏了一个单词,也就是不是字段值的子串;"quick brown f"不行是因为单词被截断了。
4. match_phrase_prefix 查询语句分词,和match_phrase类似,和 match_phrase_prefix 的区别是可以理解为字符串的子串,但是单词可以截断。
例如查询语句 ["quick", "brown", "fox", "quick ", "quick brown fox", " brown fox", "quick brown fo", "quick brown fo*"] 都能查出来,
对于中文来说,因为每个中文字均不能分割,所以和match_phrase_prefix没有任何区别
对于英文来说,单词可以分割为字母,和match_phrase_prefix有区别
例如:match_phrase查询值为"quick brown fo"查不出来,而match_phrase_prefix查询值为"quick brown fo"则能查出来

delete /query_example
PUT /query_example
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "keyword_value": {
        "type": "keyword"
      },
      "text_value": {
        "type": "text"
      }
      }
    }
  }
}
POST /query_example/_doc/
{ 
  "id":	1,
  "keyword_value": "quick brown fox",
  "text_value": "quick brown fox"
}

GET query_example/_search	
{
  "query": {
    "term": {
      "keyword_value": "quick"   /* 返回0行 */
    }
  }
}
GET query_example/_search	
{
  "query": {
    "match_phrase_prefix": {
      "keyword_value": "quick"   /* failed to create query: Can only use phrase prefix queries on text fields - not on [keyword_value] which is of type [keyword] */
    }
  }
}

 

标签:brown,Search,fox,quick,phrase,分词,match
From: https://www.cnblogs.com/panda4671/p/18129326

相关文章

  • python 操作 Elasticsearch7.x版本
    目录python操作Elasticsearch7.x版本1.连接Elasticsearch2.索引操作3.文档操作4.查询/搜索文档4.1body和query参数4.2其他查询示例python操作Elasticsearch7.x版本需要先安装这个库pip3installelasticsearch==7.9.1,python版本为3.7及以上这个是elasticsearch库......
  • Elasticsearch之-Django框架集成
    目录Elasticsearch之-Django框架集成一、elasticsearch-dsl库的使用二、与django框架集成Elasticsearch之-Django框架集成需要安装的库:安装:pip3installelasticsearch-dsl一、elasticsearch-dsl库的使用#示例fromdatetimeimportdatetimefromelasticsearch_dslimpo......
  • Elasticsearch 创建自定义分析器(4)
    一.自定义分析器当内置分析器不能满足时,可以创建一个自定义分析器,自定义分析器(analyzer)由:1)0或多个charactcrfilter字符过滤器2) 1个tokenizer分词器,将文本切分为分词  3)0或多个tokenfilter令牌过滤器,是属于分词后再过......
  • Windows11系统Windows.UI.Search.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个Windows.UI.Search.dll文件(挑选合适的版本......
  • ElasticSearch
    1.ES是什么https://www.elastic.co/cn/https://www.elastic.co/cn/elastic-stack/1.从事运维,开发,大数据的人员需要学习ElasticSearch数据库2.需要配置日志分析架构,配置ELK技术栈lucene搜索引擎库https://lucene.apache.org/core/ApacheLucene™是一个完全用Java......
  • 如何监控容器或K8s中的OpenSearch
    概述当前OpenSearch使用的越来越多,但是OpenSearch生态还不尽完善.针对如下情况:监控容器化或运行在K8s中的OpenSearch我查了下,官方还没有提供完备的方案.这里如何监控K8s中的OpenSearch,包括安装exporter插件、采集、展示全环节。OpenSearch简介OpenS......
  • :error=>"Elasticsearch Unreachable: [http://192.168.100.44:9200/][Manticore::Soc
    [2024-04-10T14:02:09,005][WARN][logstash.outputs.elasticsearch]AttemptedtoresurrectconnectiontodeadESinstance,butgotanerror.{:url=>"http://192.168.100.44:9200/",:error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool......
  • Python计算两个质谱谱图的相似度——Matchms
    在做实验的时候需要在python环境下比较两个谱图的相似度,对于这个需求就遇到两个问题:如何导入谱图,让其在python环境中显示如何对比相似度,谱图之间的相似度与向量之间的相似度有何差别我调研了一些库可以用在python中去处理谱图,包括pyteomics、spectrum_utils还有今天要介绍的......
  • 使用阿里云试用Elasticsearch学习:3.7 处理人类语言——拼写错误
    我们期望在类似时间和价格的结构化数据上执行一个查询来返回精确匹配的文档。然而,好的全文检索不应该是完全相同的限定逻辑。相反,我们可以扩大范围以包括可能的匹配,而根据相关性得分将更好的匹配推到结果集的顶部。事实上,只能完全匹配的全文搜索可能会困扰你的用户。......
  • 问题解决 usr/include/c++/11/bits/list.tcc:344:24: error: no match for ‘operator
    1.问题解决usr/include/c++/11/bits/list.tcc:344:24:error:nomatchfor‘operator==’错误解释:这个编译错误表明编译器在尝试使用==操作符比较两个对象时找不到匹配的操作符函数。在C++中,如果你尝试比较两个自定义类型的对象,且没有为这些对象定义==操作符,编译器将无法进......