在Solr中进行OR搜索

3

我有一个情况,需要在Solr中使用多个OR关键词搜索文档。现在关键词的数量可能会增加到5000个,这会导致查询条件非常庞大,有5000个OR条件。这导致了Solr服务器的崩溃。是否有其他的方法可以设计查询以使其正常工作?以下是查询的简短示例:

tweet_id:337931022601699328 或 337931064293081089 或 337931089538584576 或 337931098761871361 或 337931138851016704 或 337931143099854848 或 337931160082591745 或 337931163857453056 或 337931230819516416 或 337931239996665857 或 337931287518126080 或 337931322850951168 或 337931325648535553 或 337931331398934528 或 337931413057830912 或 337931442363441152 或 337931448629731329 或 337931453344129025 或 337931465016877056 或 337931482066726912 或 337931514388029442 或 337931533149155328 或 337931645527130114 或 337931704935256064 或 337931784459268096 或 337931845545103360 或 337931889086185472 或 337931892668108801 或 337931963983855617 或 337932154212319233 或 337932176454721536 或 337932193198374912 或 337932229659459584 或 337932437290090496 或 337932436807749632 或 337932436828725250 或 337932437449474048 或 337932448518250496 或 337932458832035843 或 337932458634915840 或 337932458278387712 或 337932474246119425 或 337932476209041409 或 337932477408620544 或 337932480478842880 或 337932478775959554 或 337932480566931456 或 337932478763376640 或 337932481841999872 或 337932479337992192 或 337932479296045057 或 337932479333797889 或 337932484614434816 或 337932484606038017 或 337932482777317376 或 337932484664758272 或 337932482785718273 或 337932484589273088 或 337932487399444481 或 337932489031032833 或 337932489114923008 或 337932486573166592 或 337932490704560130 或 337932489144270848 或 337932488762601472 或 337932492097069056 或 337932497780355072 或 337932498900230144 或 337932499722321921 或 337932514431729665 或 337932561806409731 或 337932567284154368 或 337932567300935680 或 337932574603214848 或 337932571134533632 或 337932574674518016 或 337932575484026881 或 337932578206121984 或 337932582215892994 或 337932586653454336 或 337932584917024768 或 337932592986865664 或 337932597017587712 ....

我打算根据几个字段对结果进行分面。


3
你想达到什么目的?为什么要给Solr提供那么多的ID?如果你告诉我们你的使用情况,我们可能会提供更好的解决方法。因为用大量的ID来填充Solr并不是它的优势所在。 - cheffe
我同意@cheffe的观点,如果所有这些推文都属于特定用户,则按user_id查询;如果它们属于相同的hashtag,则查找该hashtag。无论如何,请提供更多信息以澄清您的用例,以便我们能够更好地帮助您。 - mjalajel
我的使用情况是我有一组推文ID列表。现在,我想要从那些推文中的某些字段得到分面结果。我采用的方法是通过将推文ID OR 连接来准备一个查询。现在,推文ID列表可能会增加到近10k,这导致了一个非常大的查询,Solr无法处理。欢迎提出解决问题的方案或任何替代方案。 - user3335918
@mjalajel 这些推文既不属于同一用户,也不属于相同的标签。我们从推文的某些分析中获取推文列表。这些推文之间没有共同的关系,无法进行搜索。 - user3335918
2个回答

0

我不确定这个解决方案是否能帮到你,但是我为你的问题尝试了一些东西。

无论你提供给Solr什么查询,它首先会将该查询解析为可理解的格式。然后Solr执行该查询以获取结果。在向Solr查询之前,您必须进行一些计算。让我们采用以下场景来解决您的用例。

假设您总共有5000个tweet_id。您需要对大约4000个tweet_id进行OR查询。在这种情况下,最好使用否定AND查询在其他(5000-4000=1000)1000个tweet_id上进行查询。因此,您的查询将传递较少的值。

因此,请尝试使用否定AND查询查询其余的tweet_id,而不是OR查询。


0
如果我是你,我会创建一个新的字段来表示这个custom_list_id。每当你生成一个新的列表时,索引新数据,然后按照列表ID进行查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接