gpt4 book ai didi

lucene - 有没有办法在solr中合并两个查询?

转载 作者:行者123 更新时间:2023-12-04 06:12:04 25 4
gpt4 key购买 nike

在我的项目中,我们使用 solr 来索引许多不同类型的文档,例如 Books 和 Persons,具有一些常见字段(如名称)和一些特定于类型的字段(如类别或人员所属的组) .

我们想做可以找到书籍和人物的查询,为每个文档类型应用一些过滤器。就像是:

  • 查找名称和/或内容中带有“Jean”的所有书籍和人物
  • 但仅限“小说”和“幻想”类别的书籍
  • 只有来自“穿山甲”组的人
  • 一切按分数排序

  • 一个非常简单的方法是:
    q = name:jean content:jean
    &
    fq=
    (type:book AND category:(fiction fantasy))
    OR
    (type:person AND group:pangolin)

    但唉,如 fq缓存,我更喜欢让我更简单、更可重用的东西 fq喜欢 :
  • fq=type:book ,
  • fq=type:person ,
  • fq=category(fiction fantasy) ,
  • fq=group:pangolin .

  • 有没有办法告诉 solr 合并或组合许多查询?类似于“分组” fq一起。

    我通过 _query_ 阅读了一些关于嵌套查询的信息,但是关于它的极少文档让我认为这不是我正在寻找的解决方案。

    最佳答案

    正如 Geert-Jan 在他的回答中提到的那样,可以做 OR之间fq是一个 solr 询问功能,但目前支持很少:https://issues.apache.org/jira/browse/SOLR-1223

    所以我设法以一种简单的方式模拟了我想要的:

  • 对于文档类型可以具有的每个字段,我们必须每次定义一个值(因此,如果在我自己的示例中 Books 可以没有类别,则在索引时我们仍然必须定义类似 category=noCategoryCode
  • 的内容)
  • 当在多个类型的查询中对这个字段之一使用过滤器时,我们在过滤器中添加了一个不存在的条件,所以 fq=category:fiction变成 fq=category:fiction (*:* AND -category:*)

  • 通过这种方式,所有其他类型(如 Person)都将通过此过滤器,并且该过滤器非常原子且经常使用 - 因此缓存仍然有用。

    因此,我的完整示例变为:
    q = name:jean content:jean
    &
    fq= type:(book person)
    &
    fq= category:(fiction fantasy) (*:* AND -category:*)
    &
    fq= group:(pangolin) (*:* AND -group:*)

    不过,等不及要修补 SOLR-1223 了 :)

    关于lucene - 有没有办法在solr中合并两个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664847/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com