我看教程说 term 会进行精确匹配。 现在有一个请求如下:
{
"query": {
"term": {
"agent": {
"value": "chrome"
}
}
}
}
agent 这个文档属性是 analyzed 的,那么请问这个时候这个到底是精确匹配还是全文匹配?我想问的主要问题是, term 是不是只有在应用到 not_analyzed 的字段上的时候才会进行精确匹配?否则的话就跟 match 一样的是全文匹配?
谢谢回答!
1
JerryKwan 2016-05-04 17:07:11 +08:00
默认情况下 Analyzed 的好像就无法精确匹配了。对于这类既需要精确匹配又需要全文搜索的,建议使用 Multi-fields 。
建议多看看官方文档,实际动手试试。 |
2
CunZhangCao 2016-05-04 17:22:06 +08:00
term 查询直接匹配的是词元,不走分词过程; match 查询的时候是走分词过程的。
|
3
dqh3000 2016-05-04 17:22:40 +08:00
要精确匹配可以 not_analyzed + wildcard
不 not_analyzed 的应该都分析了 |
4
davidyanxw 2020-06-02 19:13:30 +08:00
analyzed 设置时:对应分词; doc 会分词处理,query 也会分词处理;
term 对应词项,term 是分词生成的,当然不分词的话就是自身。 ----------------------------- analyzed: 三个 doc: google chrome google Chrome googlechrome term query: chrome 命中:文档 1 、2 (文档 2,分词处理后变成了 google chrome ) term query: Chrome 命中: 文档 1 、2 ( query,分词处理后变成了 chrome ) ==================== unanalyzed: 同样的文档 term query: chrome 命中: 没有 term query: Chrome 命中: 没有 term query: google chrome 命中:文档 1 (没有分词过程了) 结论: term query,字面意思就是词项查询 是否分词,影响的是 doc 和 query 生成的 term ;进一步 term query 时候,和原始的字符串未必一致。 |
5
davidyanxw 2020-06-02 19:24:31 +08:00
@davidyanxw
勘误: term query 不会分词,doc 会分词( analyzed 时) analyzed: term query: chrome 命中:文档 1 、2 term query: Chrome 命中:没有(找不到 term=Chrome 的文档) |