ES 初学者,有一个关于 term 的疑问求解答

2016-05-04 16:54:47 +08:00
 hellogbk

我看教程说 term 会进行精确匹配。 现在有一个请求如下:

{
    "query": {
        "term": {
           "agent": {
              "value": "chrome"
           }
        }
    }
}

agent 这个文档属性是 analyzed 的,那么请问这个时候这个到底是精确匹配还是全文匹配?我想问的主要问题是, term 是不是只有在应用到 not_analyzed 的字段上的时候才会进行精确匹配?否则的话就跟 match 一样的是全文匹配?

谢谢回答!

2931 次点击
所在节点    程序员
5 条回复
JerryKwan
2016-05-04 17:07:11 +08:00
默认情况下 Analyzed 的好像就无法精确匹配了。对于这类既需要精确匹配又需要全文搜索的,建议使用 Multi-fields 。
建议多看看官方文档,实际动手试试。
CunZhangCao
2016-05-04 17:22:06 +08:00
term 查询直接匹配的是词元,不走分词过程; match 查询的时候是走分词过程的。
dqh3000
2016-05-04 17:22:40 +08:00
要精确匹配可以 not_analyzed + wildcard
不 not_analyzed 的应该都分析了
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 时候,和原始的字符串未必一致。
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 的文档)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/276298

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX