代码之家  ›  专栏  ›  技术社区  ›  Frank Schwieterman

lucene查询大小-这个可以扩展吗?查询'1、2或3。。或N'

  •  4
  • Frank Schwieterman  · 技术社区  · 14 年前

    假设我有一个lucene查询'id1或id2或id3。。。同上。随着N的增加,这个比例有多大?

    我所看到的情况类似于某人在购物车中对产品进行文本搜索,但他们的购物车中可能有成百上千的商品。用户希望对购物车中的所有产品进行文本搜索。我可以对所有可用的产品进行文本查询,然后在购物车中限制返回的带有产品ID的OR子句的项目吗?

    5 回复  |  直到 14 年前
        1
  •  4
  •   Shashikant Kore    14 年前

    默认情况下,布尔查询中的最大子句数为1024。你可以增加这个限制。不过,这将是一个性能惩罚。我想,如果你用过滤器来代替的话,效率会很高。

        2
  •  2
  •   Xodarap    14 年前

    正如一些人已经回答的那样,存在实际的局限性。然而,如果你对这个理论感兴趣的话,那么做一堆OR'd术语和一个有很多可能结果的术语之间其实没有什么区别。如果p是与您的查询匹配的过帐(术语/文档对)的数量,并且您希望找到k个最佳匹配项,则查询将在O(p log k)中运行。看道格的报纸 Space Optimizations for Total Ranking .

    如果在索引总数中有q个查询项或'd和t个查询项,它实际上类似于O(q logt+p logk),但对于大多数应用程序,p logk将占主导地位。(这个公式来源于这样一个事实:查找发布流需要logt时间,而且每个查询项必须执行一次。)

        3
  •  1
  •   Mikos    14 年前

    正如@Shashikant Kore提到的,默认情况下限制是1024。

    如果您有一个非常大的文本集合,您可能需要查看 MoreLikeThis 实现-它使用一些简洁的启发式方法从您拥有的内容生成一个代表性的查询。

        4
  •  1
  •   Kai Chan    14 年前

    FilteredQuery 在搜索期间。它的构造函数接受一个查询和一个过滤器。根据用户输入的内容创建查询(查看 QueryParser ). 从产品ID列表中创建过滤器(请看 TermsFilter

        5
  •  0
  •   Guillaume Lebourgeois    14 年前

    查询中布尔语句的数量有限制。