0

我工作的应用程序使用 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 是错误的吗?

4

1 回答 1

2

您可能正在通过唯一键覆盖文档。确保来自不同商店的产品具有不同的唯一键。您可以通过将每个商店的前缀附加到唯一键值来做到这一点。

于 2011-09-01T15:39:41.533 回答