是否有与 ElasticSearch 的 Postgres ts_vector 字段类似的方法?
Is there a similar approach as Postgres's ts_vector field for ElasticSearch?
使用 Postgres 时,您可以使用 ts_vector 将数据库字段中的字符串索引为向量。 (https://www.postgresql.org/docs/10/datatype-textsearch.html#DATATYPE-TSVECTOR)
ElasticSearch 有类似的概念吗?
当您将字符串索引到 text
字段时,ES 在幕后做了很多事情。
让我们以您提供的 link 中的第一个示例为例:a fat cat sat on a mat and ate a fat rat
使用 PG tsvector
类型,将对以下标记进行分析和索引
a and ate cat fat mat on rat sat
如果你想保留位置,你需要指定它们,像这样:
a:1 fat:2 cat:3 sat:4 on:5 a:6 mat:7 and:8 ate:9 a:10 fat:11 rat:12
而在 ES 中,位置会自动保留,无需指定。也可以告诉 ES 不记录它们(为了省事space)
使用 ES text
类型和 standard
analyzer,将对以下标记进行分析和索引
a fat cat sat on a mat and ate a fat rat
有了 english
analyzer,我们得到了这个(删除了停用词,词干等)
fat cat sat mat at fat rat
ES 不按字母顺序存储标记,它对 free-text 搜索也无济于事。它也不会删除重复项(尽管它是 possible to do it),因为这会干扰文档和索引中的标记频率,从而影响评分。
基本上,两者都对几乎相同的标记进行索引,尽管 ES 本质上是一个搜索引擎,并且以更优化的方式进行搜索。在查看tsquery
类型时,ES中的自由文本搜索也多了一点user-friendly。
使用 Postgres 时,您可以使用 ts_vector 将数据库字段中的字符串索引为向量。 (https://www.postgresql.org/docs/10/datatype-textsearch.html#DATATYPE-TSVECTOR)
ElasticSearch 有类似的概念吗?
当您将字符串索引到 text
字段时,ES 在幕后做了很多事情。
让我们以您提供的 link 中的第一个示例为例:a fat cat sat on a mat and ate a fat rat
使用 PG tsvector
类型,将对以下标记进行分析和索引
a and ate cat fat mat on rat sat
如果你想保留位置,你需要指定它们,像这样:
a:1 fat:2 cat:3 sat:4 on:5 a:6 mat:7 and:8 ate:9 a:10 fat:11 rat:12
而在 ES 中,位置会自动保留,无需指定。也可以告诉 ES 不记录它们(为了省事space)
使用 ES text
类型和 standard
analyzer,将对以下标记进行分析和索引
a fat cat sat on a mat and ate a fat rat
有了 english
analyzer,我们得到了这个(删除了停用词,词干等)
fat cat sat mat at fat rat
ES 不按字母顺序存储标记,它对 free-text 搜索也无济于事。它也不会删除重复项(尽管它是 possible to do it),因为这会干扰文档和索引中的标记频率,从而影响评分。
基本上,两者都对几乎相同的标记进行索引,尽管 ES 本质上是一个搜索引擎,并且以更优化的方式进行搜索。在查看tsquery
类型时,ES中的自由文本搜索也多了一点user-friendly。