1

我有这种情况:

{"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。

4

1 回答 1

0

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

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

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

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

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

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

于 2014-07-17T13:01:45.323 回答