Search of Term

基本查询

Term是表达语意的最小单位。搜索和利用统计语言模型进行自然语言处理都需要处理Term.

在ES中Term Level Query 有这几种:

Term 查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公式为每个包含该词项的文档进行相关度算分, 同时可以通过Constant Score将查询转换成一个Filtering, 避免算分,并利用缓存,提高性能

POST /products/_search
{
	"query": {
		"term": {
			"desc.keyword ": {
				"value": "iphone"
			}
		}
	}
}

<aside> 💡 在使用 search of term 的时候, 需要注意, ES 对默认插入的文档是会进行分词处理的

</aside>

<aside> 💡 通过 term 的查询, 默认关系是包含而不是相等, 故对于字段是数组的, 也同样有效

</aside>

复合查询

利用 Constant Score 转为 Filter, 跳过相关性算分, 可以提高性能, 同时通过 Filter 可以有效利用缓存

POST /products/_search
{
	"explain": true,
	"query": {
		"constant_score": {
			"filter": {
				"term": {
					"desc.keyword": "iphone"
				}
			}
		}
	}
}

基于全文的查询

基于全文本的查找有如下几种