Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SOLR faceted search以使用或运算符返回面计数_Solr_Faceted Search_Facet - Fatal编程技术网

SOLR faceted search以使用或运算符返回面计数

SOLR faceted search以使用或运算符返回面计数,solr,faceted-search,facet,Solr,Faceted Search,Facet,在设置问题之前,我将首先尝试解释我希望通过在SOLR中使用分面搜索来实现什么。假设我有一个dog参数,它描述了dog适合做什么,一只狗可以有多种选择。让我们称之为“住房”。因此,狗适合: 室内 户外 孩子们 老年人 守卫 因此,基本上,当我在这个参数上使用faceted搜索时,我会在当前数据库中得到如下结果(url查询facet=true&facet.field=housing): 室内(74)、室外(63)、儿童(71)、老人(65)、警卫(31) 现在,当我检查室内参数(url queryf

在设置问题之前,我将首先尝试解释我希望通过在SOLR中使用分面搜索来实现什么。假设我有一个dog参数,它描述了dog适合做什么,一只狗可以有多种选择。让我们称之为“住房”。因此,狗适合:

  • 室内
  • 户外
  • 孩子们
  • 老年人
  • 守卫
  • 因此,基本上,当我在这个参数上使用faceted搜索时,我会在当前数据库中得到如下结果(url查询
    facet=true&facet.field=housing
    ):

    室内(74)、室外(63)、儿童(71)、老人(65)、警卫(31)

    现在,当我检查室内参数(url query
    fq=housing:1&facet=true&facet.field=housing
    )时,我得到如下结果:

    室内(74)、室外(53)、儿童(60)、老人(53)、警卫(15)

    它告诉我,如果检查下一个参数“户外”,有53只狗在室内和室外。我想得到结果,它会告诉“如果我选中下一个选项,将有多少只狗添加到结果中”。因为可能有只适合户外活动的狗。在检查第一个“室内”参数后,我希望得到如下结果:
    室内(74)、室外(83)、儿童(78)、老人(79)、看守(75)
    或者以其他方式
    室内(+0)、室外(+9)、儿童(+4)、老人(+5)、警卫(+1)


    在SOLR分面搜索中是否可能出现这种情况?或者我使用了不正确的工具来实现这一点。因为基本上,当我选中“室内”和“室外”时,我会从查询中得到正确的结果计数(url查询
    fq=housing:(1或2)&facet=true&facet.field=housing
    )。仅方面计数不是我所期望的。

    我认为您需要使用参数,该参数将允许您指定一个只应用于方面结果而不应用于主查询的查询

    此参数允许您以Lucene默认语法指定任意查询以生成方面计数。默认情况下,faceting返回“字段”的唯一术语计数,而facet.query允许您确定任意术语或表达式的计数


    在您的情况下,我相信您仍然会返回“字段”的唯一术语的方面计数,但会应用一些附加过滤器。

    我认为下一种方法应该有效:

    fq={!tag=housing}housing:1&facet.field={!key=housing}housing&facet.field={!key=housing_ex ex=housing}housing
    
    你应该得到这样的东西:

    "facet_counts": {
      "facet_queries": {},
      "facet_fields": {
        "housing": [
          "1", 74,
          "2", 53,
          "3", 60,
          "4", 53,
          "5", 15
        ],
        "housing_ex": [
          "1", 74,
          "2", 63,
          "3", 71,
          "4", 65,
          "5", 31
        ]
      }
    }
    
    然后你应该做:
    housing\u exhousing
    。结果是:

    1: +0
    2: +10
    3: +11
    4: +12
    5: +16
    
    numFound+housing\u ex-housing

    1: 74
    2: 84
    3: 85
    4: 86
    5: 90
    

    facet.query
    不适用于许多facet值。

    附加参数&rows=0

    没有复杂地获取示例?你想得到刻面计数而不考虑过滤器吗???我已经发现,实现我想要的唯一方法(可能)是对这样的刻面进行另一个查询,fq=housing:(!(1))&facet=true&facet.field=housing&rows=0,这基本上否定了原始查询。对于更多选中的选项(例如室内和室外),我需要像fq=housing:(!(1或2))&facet=true&facet.field=housing&rows=0这样的查询。因为我需要更多的参数,所以基本上每个参数都需要进行这个“否定”查询来获取数字,这对我来说并不是最理想的:/您可以在同一个查询中排除facets过滤器。您还可以将别名添加到facet字段,以便获得包含和排除的faceswow,这是一个答案。是的,我现在能够以我需要的方式准确返回面计数。我还需要提到的是,我使用了Jayendra的方法在同一个查询中排除了facet过滤器,最终查询如下:fq={!tag=dt}housing(1或2)&facet=true&facet.query={!ex=dt}housing:(3和!(1或2)),所以当选项“indoor”和“oudoors”时如果选中第三个,我需要知道将返回多少额外结果。虽然这不是对上述问题的回答,但这将帮助您减少查询获取初始方面结果(用于构建初始筛选器)所需的时间,而不会损失太多性能。(因为过滤查询结果会被缓存)+1给我一个很好的想法!