《ElasticSearch查询》目录导航:
- ElasticSearch查询 第一篇:搜索API
- ElasticSearch查询 第二篇:文档更新
- ElasticSearch查询 第三篇:词条查询
- ElasticSearch查询 第四篇:匹配查询(Match)
- ElasticSearch查询 第五篇:布尔查询
字符串的完全匹配是指字符的大小写,字符的数量和位置都是相同的,词条(term)查询使用字符的完全匹配方式进行文本搜索,词条查询不会分析(analyze)查询字符串,给定的字段必须完全匹配词条查询中指定的字符串。由于词条查询的字符串是未经分析(analyzed)的词条,因此,词条查询经常用于结构化的数据,例如,数值,日期等,当用于文本搜索时,最好在索引映射中设置字符串字段不被索引,也就是说,设置index属性为not_analyzed,否则,只能对该字段进行单词条搜索,也可以使用多字段(fields)属性,定义一个不被分析的字段,原始字段用于全文搜索,而多字段用于词条搜索:
"properties": { "title":{ "type":"string","index":"analyzed" "fields":{ "title_exact":{"type":"string","index":"not_analyzed"} } },
一,词条查询和全文查询
词条(term)查询和全文(fulltext)查询最大的不同之处是:全文查询首先分析(Analyze)查询字符串,使用默认的分析器分解成一系列的分词,term1,term2,termN,然后从索引中搜索是否有文档包含这些分词中的一个或多个,如果执行的match查询,默认的操作符(operator)是,只要文档的字段值能够匹配任意一个词条,该文档就匹配查询条件;而词条查询是字符的完全匹配,只有当字段的字符完全匹配查询字符串时,ElasticSearch引擎才判定文档匹配查询条件:
词条查询:词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时,才匹配搜索。当在未被分析的字段中进行搜索时,和查询字符串完全匹配的文档会被返回;如果在已分析(Analyzed)的字段中进行搜索,词条必须是小写的单个词条,否则,匹配不到任何文档;
全文查询:ElasticSearch引擎会先分析(analyze)查询字符串,将其拆分成小写的分词,只要已分析的字段中包含词条的任意一个,或全部包含,就匹配查询条件,返回该文档;如果不包含任意一个分词,表示没有任何文档匹配查询条件。
While the full text queries will analyze the query string before executing, the term-level queries operate on the exact terms that are stored in the inverted index.
举个例子,创建索引,并索引文档:
PUT my_index { "mappings": { "my_type": { "properties": { "full_text": { "type": "string" }, "exact_value": { "type": "string", "index": "not_analyzed" } } } } } PUT my_index/my_type/1 { "full_text": "Quick Foxes!", "exact_value": "Quick Foxes!" }