【发布时间】:2017-12-23 04:42:03
【问题描述】:
说我有句This is a new city
- 弹性搜索是否为单词的所有可能排列/组合创建索引。例如对于单词“city”,它会创建索引“it”、“ty”、“ity”、“cit”等吗?
- 这些索引是在文档存储时还是在运行时创建的?
- 这些索引是保存在内存中还是数据库中?
【问题讨论】:
标签: elasticsearch lucene n-gram
说我有句This is a new city
【问题讨论】:
标签: elasticsearch lucene n-gram
这取决于您的tokenizer。默认情况下,Elasticsearch 使用Standant Tokenizer 其中divides text into terms on word boundaries, as defined by the Unicode Text Segmentation algorithm. 这意味着您的句子将被标记为this, is, a, new, city。如果您愿意,可以创建自定义标记器。
当您将文档放入 Elasticsearch 时,它们会被编入索引。
数据保存在文件系统中:https://www.elastic.co/blog/found-dive-into-elasticsearch-storage
这是一篇关于内部的博文:https://www.elastic.co/blog/found-elasticsearch-from-the-bottom-up
【讨论】:
it 时,弹性搜索是否不会搜索单词 city?我是否需要创建自定义标记器来为每个单词的可能字谜创建索引?
wildcard 查询和*it*。参考:elastic.co/guide/en/elasticsearch/guide/current/….
For such a match you can use .. 时,您是在要求最终用户使用通配符吗?我以为 ES 会自动完成?
this, is, a, new, city 的条款工作。当然,您也可以使用自定义标记器将it 作为术语进行索引。然后你可以使用除wildcard之外的普通查询。
cty 而不是city,它也会搜索城市。谷歌或任何其他类似的引擎是否会为文档中所有可能的单词变位词创建索引?