Solr Faceting计数降至零

时间:2011-09-01 15:02:04

标签: java php solr faceted-search

我工作的应用程序使用Solr索引不同商店的页面或产品。当我说“不同商店的产品”时,这意味着产品可以在商店A或商店B中获得,但不能在商店C上获得。如果客户连接到商店C网站并搜索不可用的商品在此商店中,它不应出现在搜索结果中。

我的架构中有一个“类型”字段,允许我判断文档是“页面”还是“产品”。现在我有了这个搜索约束,这个字段包含“page”或像“productB”这个“productA”的复合键。你猜对了,A或B是商店的id。

对于数据库中的每个产品,我会将其索引n次,其中n是销售此产品的可用商店数量。

我想使用分面搜索来过滤我想要搜索的商店,但我遇到了问题:

我正在开始索引并搜索“foobar”而不会面对搜索。我得到了一个像这样的方面列表:

<lst name="facet_fields">
    <lst name="type">
        <int name="productA">10</int>
        <int>0</int>
</lst>

这个数字正在增长和增长(这是正常的),直到商店A的指数化完成。 然后我开始对商店B进行索引,并在查询solr时得到这种结果

<lst name="facet_fields">
    <lst name="type">
        <int name="productA">303</int>
        <int name="productB">6</int>
        <int>0</int>
</lst>

但是过了一会儿,solr生气了,并把这个结果发给我了:

<lst name="facet_fields">
    <lst name="type">
        <int name="productB">320</int>
</lst>

是。我甚至没有得到productA的分数,我甚至无法搜索它!它将带来0结果。

你知道发生了什么吗? 使用facet这种问题是错误的吗?

1 个答案:

答案 0 :(得分:2)

您可能会使用唯一键覆盖文档。确保来自不同商店的产品具有不同的唯一密钥。您可以通过将每个商店的前缀附加到唯一键值来完成此操作。