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"
}
}
}
}
}
基于全文本的查找有如下几种