Elastic/Lucene 对未分析的字段有何作用?

What does Elastic/Lucene do with a field that is not analyzed?

Elastic/Lucene 对未分析的字段有何作用?它不必为该字段值创建倒排索引或位置(我想)。只需要记录值?

我怀疑它仍然是一个只有一个词项的倒排索引。术语的位置将始终锚定在字段的开头和结尾。这看起来准确吗?

在 ES 2.x 中,当声明一个 string 字段时,您有 three options 关于它是如何被索引的。您可以使用

声明该字段
  1. index: analyzed,在这种情况下,字符串内容被分析和索引(-> 分析的标记存储在倒排索引中)
  2. index: not_analyzed,在这种情况下,字符串内容未被分析但仍被索引 "as is"(-> 确切的字符串未更改地存储在倒排索引中)。此外,确切的值也存储在 doc values index
  3. index: no,在这种情况下,字符串内容未被分析且根本未被索引(因此不可搜索)

在 ES 5.x 中,您现在有两种不同的字段类型,即:

  • text 与以前的 index: analyzed 相同(上述情况 1)
  • keyword 与以前的 index: not_analyzed 相同(上述情况 2)

此外,这两个字段现在仍然接受 index 参数,但只能接受值 truefalse。所以基本上,你现在有四种可能性,但只有三种真正有意义:

  1. text + index: true,这是您要分析字符串并对其编制索引时的正常情况(与情况 1 相同)
  2. text + index: false,这实际上没有意义,因为没有理由分析字符串而不对其进行索引
  3. keyword + index: true,这是当您不想分析字符串但仍按原样索引值时(与情况 2 相同)
  4. keyword + index: false,这是当你不想分析你的字符串也不索引它的时候(与情况 3 相同)

对于情况3和4,默认情况下该值也存储在doc values index中。