在Solr中查询关系

时间:2014-07-17 12:52:09

标签: python solr sunburnt

我遇到这种情况:

{"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中创建两个集合,并模拟连接以安装此最终响应。
  3. 我在索尔里真的很新,所以我有点困惑。

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

1 个答案:

答案 0 :(得分:0)

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

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

  1. 如果您只需要类别的名称,请将类别定义为包含类别名称的multiValued字段,仅此而已。这将允许您对该字段执行查询,并将返回partciular产品的类别名称。如果您只想要与查询匹配的类别,您可以使用荧光笔功能来标记它,虽然我没有一个非常好的解决方案(...但这是否真的有必要?)

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

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

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