【问题标题】:How to structure Elasticsearch indices/types?如何构建 Elasticsearch 索引/类型?
【发布时间】:2014-03-15 14:42:46
【问题描述】:

您将如何为 eshop 应用程序构建索引/类型?这样的 eshop 将由产品、类别、标签、制造商等领域对象组成。全文搜索结果页面应显示所有领域对象的混合列表。

我能想到两个选择:

  1. 每个应用程序一个索引,每个域对象作为一个类型。
  2. 每个域对象都有自己的索引,类型相同 - “item”。

哪个选项可以更好地扩展?

数据库中的大多数“项目”都是产品。有些产品还没有/不再可用。如何提升当前可用的产品?

全文应该更倾向于在页面顶部显示类别/制造商。如何从某个索引提升某些类型/对象?

【问题讨论】:

  • 这是一个相当大的问题,有几个变量。如果您可以提供一组示例文档或更多信息(请随意使用 sense.qbox.io/gist/,我可能会提供帮助。最大的问题是您将如何搜索的数据和结构。那里在 Elasticsearch 中,eshop 搜索当然是一些相当标准的约定,但这是一个相当大的问题。
  • 这些是我将使用的映射(如果所有内容都在一个索引中)。 sense.qbox.io/gist/72a7cea515d4c116a93d529a025ed89161c92796 问题是整个前端列表应该在 ES 上运行 - 即按类别/标签过滤应该与全文搜索一样快。

标签: full-text-search elasticsearch indices


【解决方案1】:

为了获得更好的性能,我建议第一个选项更好。

1)“每个应用程序一个索引,每个域对象作为一个类型。”

2)假设您创建了一个名为“eshop”的索引。以及移动、图书等类型

3)因为你可以根据你的用户输入进行查询。考虑你创建一个像flipkart这样的购物网站。在搜索中用户可以使用普通关键字进行搜索。

4) 现在您可以在 Elasticsearch 中搜索,只需提及索引名称。如果用户引用 sum 过滤器,例如移动,范围 1000-10000。您需要在移动类型内搜索,而且我们可以轻松地在 Elasticsearch 中进行过滤。它会减少您的执行内存和 CPU。

提升可用产品。在您的文档中添加一个名为“available”的字段。搜索时提及提升可用产品的价值。示例:

    {
      "query": {
        "term": {
          "available": true
        }
      }
      "boost": 1.5
    }

更多提升参考

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html

http://jontai.me/blog/2013/01/advanced-scoring-in-elasticsearch/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2017-02-23
    • 2017-06-03
    • 2016-12-29
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多