我遇到这种情况:
{"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'}}
我不知道最好的方法。目前,我的选择是:
我在索尔里真的很新,所以我有点困惑。
顺便说一句,我在Flask应用程序中使用了sunburnt。
答案 0 :(得分:0)
使用Solr模拟连接通常是我想要避免的,因为这需要几次往返Solr才能获取信息。然而,这是一个可能的解决方案,但需要更多的应用程序逻辑(我更倾向于使用Solr进行搜索,然后从数据库支持的商店中查找信息,如果应用程序中已有的话在那种情况下)。
我有两条建议可以避免额外的往返:
如果您只需要类别的名称,请将类别定义为包含类别名称的multiValued字段,仅此而已。这将允许您对该字段执行查询,并将返回partciular产品的类别名称。如果您只想要与查询匹配的类别,您可以使用荧光笔功能来标记它,虽然我没有一个非常好的解决方案(...但这是否真的有必要?)
如果您需要有关该类别的更多元信息(例如ID,名称等),请创建两个字段,一个字段包含您要搜索的名称,另一个字段是“序列化”类别的JSON表示。这样,您就可以将所需的数据附加到文档中,以及要查询的正确字段。
搜索类似于product:Product categories:"Category 1"
或使用edismax以及更灵活的搜索:q=Product Category 1&qf=product categories
- 这取决于您希望搜索如何运作。
此解决方案的缺点是,如果更改类别的名称,则必须重新索引类别中的所有内容,以获取每个文档的更新名称。在实践中,这通常不难处理。我们的生产后端仅由Solr支持,如果需要,我们会重新索引数据。