【问题标题】:Elastic search index on all attributes?所有属性的弹性搜索索引?
【发布时间】:2018-05-12 06:57:29
【问题描述】:

我是弹性搜索(ES)的新手,并且已经完成了基本教程,例如 this mykong tutorial

我对创建任何文档的一部分有疑问

CREATE 操作示例 要使用 /mkyong/posts/1001 和以下请求数据插入新文档:

    {
      "title": "Java 8 Optional In Depth",
      "category":"Java",
      "published_date":"23-FEB-2017",
      "author":"Rambabu Posa"
    }

问题一:- ES 是否会默认为上述文档的所有属性(即title/category/published/author)创建倒排索引并提供 全文搜索还是我需要明确提及?

问题 2:- 在上面的示例中,我们已经有了 unique_id,即 1001。如果我已经将它存储在数据库中并生成 ID,那很好。如果 我需要通过 ES 引擎生成 ID 并且没有任何数据库?

更新:-

Specify which fields are indexed in ElasticSearch得到问题1的答案

【问题讨论】:

    标签: java elasticsearch indexing full-text-search


    【解决方案1】:

    问题 1:- 是的,默认情况下,ES 会将您的字段作为两种不同类型索引两次。一次作为“文本”,一次作为“关键字”作为“title.keyword”等子字段。 “文本”类型通过语言分析器运行以支持标准搜索案例(删除停用词、词干等)。 “关键字”类型不做任何更改,并且完全按照支持精确匹配和聚合的方式索引数据。你可以明确地告诉 ES 任何字段的映射,但如果你不这样做,这是默认行为。

    以下是有关文本与关键字行为的一些信息: https://www.elastic.co/blog/strings-are-dead-long-live-strings

    问题 2:- ES 会自动为您在名为“_id”的字段中索引的每个文档创建自己的内部 ID。从技术上讲,您可以用您自己的 ID 替换它,但通常您不想这样做,因为它会通过使 ES 的散列算法不良地分散数据预制件来影响性能。通常最好在文档中添加您想要的任何 ID 作为新字段并让 ES 为您编制索引,最好是作为关键字类型。

    https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html

    【讨论】:

    • 两个后续问题。我的主要问题是弹性搜索是否会在文档的所有列(在我的情况下为title/category/published/author)上创建全文搜索,或者我需要提及我需要创建索引的文档的哪个特定列?现在回到你的答案。 Answer 1:- 你的意思是关键字搜索的工作方式与 sql db 中的 like 关键字相同,而text 将作为完整的 ntext 搜索工作?
    • Answer 2:- 另外我没有明白使用 ES 创建的 _id 会如何影响性能?你能详细说明一下吗?
    • 答案 1:是的,文本类型支持全文搜索,关键字类型与典型 SQL DB 支持的完全匹配。
    • 答案 2:文档的 _id 与散列函数一起使用,以确定将文档放在哪个分片(这意味着哪些机器)上。与此散列函数一起使用时,保证由 ES 生成的 _id 是平衡的。如果您自己生成,情况可能并非如此,并且您最终可能会在某些分片中获得比其他分片更多的数据。
    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 2018-08-20
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多