【问题标题】:Query with relation in Solr在 Solr 中查询关系
【发布时间】:2014-09-08 08:39:23
【问题描述】:

我有这种情况:

{"product": {"name": "Name of Product",
             "categories": [{'name': 'Category 1'}, {'name': 'Category' 2}]}

这是我的 solr 文档的结构简历。当我要搜索时,我总是会搜索产品名称和类别。但是,如果我搜索这个产品和category = 'Category 1',我应该返回一个像这样的json:

{"product": {"name": "Name of Product",
             "categories": {'name': 'Category 1'}}

我不知道最好的方法。目前,我的选择是:

  1. 在代码中制作这个最终结构;
  2. 在 Solr、Product 和 Category 中创建两个集合,并模拟连接以安装此最终响应。

我是 Solr 的新手,所以我有点困惑。

顺便说一句,我在我的 Flask 应用程序中使用 sunburnt。

【问题讨论】:

    标签: python solr sunburnt


    【解决方案1】:

    使用 Solr 模拟连接通常是我想要避免的,因为这需要多次往返 Solr 来获取信息。然而,这是一个可能的解决方案,但需要更多的应用程序逻辑(我更喜欢使用 Solr 进行搜索,然后从数据库支持的存储中查找信息,如果在这种情况下应用程序中已经可用)。

    我有两个建议可以避免额外的往返:

    1. 如果您只需要类别名称,请将类别定义为包含类别名称的多值字段,仅此而已。这将允许您对该字段执行查询,并将返回特定产品的类别名称。如果您只想要与查询匹配的类别,则可以使用荧光笔功能对其进行标记,尽管我对此没有很好的解决方案(..但这真的有必要吗?)

      李>
    2. 如果您需要有关类别的更多元信息(例如 id、名称等),请创建两个字段,一个包含您要搜索的名称,另一个字段是该类别的序列化 JSON 表示.这样您就可以将所需的数据附加到文档中,以及要查询的适当字段。

    搜索类似于 product:Product categories:"Category 1" 或使用 edismax 和更灵活的搜索:q=Product Category 1&qf=product categories - 这取决于您希望搜索如何运行。

    此解决方案的缺点是,如果您更改类别的名称,则必须重新索引该类别中的所有内容,以获取每个文档的更新名称。在实践中,这通常不难处理。我们的生产后端仅由 Solr 提供支持,如果需要,我们会重新索引数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      相关资源
      最近更新 更多