【问题标题】:different field according to categories根据类别不同的​​领域
【发布时间】:2013-06-25 05:07:11
【问题描述】:

我正在尝试使用弹性搜索来搜索产品。例如,如果产品是一辆汽车,它将有一些字段,如“颜色”、“品牌”、“型号”、“公里”…… 如果是衣服,就只有“颜色”、“尺码”…… 我想用弹性索引所有这些信息,以便能够搜索公里在 aaa km 和 bbb km 之间的汽车,和/或 xxxx 型号,对于衣服或任何其他产品也是如此。

如何在 elasticsearch 中创建此类字段?我希望所有产品都在同一个索引中,这样用户就可以搜索所有产品,而且如果用户搜索一种产品,那么他应该能够根据这种产品指定更多的细节。

我在考虑数组字段,但这是否意味着所有产品都将具有对应于所有类型产品的所有字段,即使某些字段与某些产品不相关(即衣服会有 km 字段??)?或者是否可以在索引上只放置与每个产品对应的所需信息?

谢谢

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    你可以使用类型。创建一个名为 car 的类型,其中包含颜色、品牌、型号、k 等字段,然后创建一个名为cloth 的类型,其中包含颜色、尺寸等字段。

    一个索引可以有多种类型。以下两个链接可能会对您有所帮助:

    1. Creating indices

    2. Creating types and mapping to the index

    您可以轻松地跨类型搜索,这样您就可以发出这样的搜索以返回该索引内所有类型的所有文档:

    curl -XGET http://localhost:9200/_search?pretty=true -d '{"query":{"matchAll":{}}}'
    

    其他信息 - Searching across types

    拥有一个数组字段不是一个好主意,因为您不会利用弹性搜索的能力来索引半结构化文档。

    一切顺利。

    【讨论】:

    • 感谢您的回答。这似乎是我需要的。但是有没有办法优化或进行某种继承,因为所有产品都有一些共同的字段,如价格、类别、日期、图像......
    • 再次感谢您的回答。我使用铁轨和轮胎。你知道这是否可能吗?我正在寻找示例,但我找不到。
    • 目前我的映射是这样的映射做索引:id,类型:'integer',:index =>:not_analyzed索引:category_id,类型:'integer',:index =>:not_analyzed索引: created_at, type: 'date', :index => :not_analyzed 索引 :price, type: 'float', :index => :not_analyzed 索引 :photo, type: 'boolean', :index => :not_analyzed 索引 :title 索引:text end PS : 对不起格式,似乎无法在评论中添加新行
    • 我最终选择使用动态映射,因为我只需要在我的映射中添加一行即可使其正常工作。
    • 无论如何感谢您的帮助 ;-) 因为我做了更改,有时弹性搜索开始很长,我必须重新启动服务器。但由于我还进行了一些其他更改,我不确定它是否相关。你知道我怎么能找出问题所在吗? (我为这个问题创建了另一个帖子:stackoverflow.com/questions/17344460/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多