Solr 单个方面字段上的Multiple facet.prefix

Solr 单个方面字段上的Multiple facet.prefix,solr,facet,faceted-search,Solr,Facet,Faceted Search,我正在创建一个搜索应用程序,它大量使用Solr(5.2.1)的刻面功能。一个要求是限制由指定字段的前缀返回的方面的数量 标准Solr查询语法适用于单个前缀值: /select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=DocumentKind&f.DocumentKind.facet.prefix=faq 输出: "facet_counts": { "facet_q

我正在创建一个搜索应用程序,它大量使用Solr(5.2.1)的刻面功能。一个要求是限制由指定字段的前缀返回的方面的数量

标准Solr查询语法适用于单个前缀值:

/select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=DocumentKind&f.DocumentKind.facet.prefix=faq
输出:

"facet_counts": {
    "facet_queries": {},
    "facet_fields": {
      "DocumentKind": {
        "faq": 1523
      }
      ...
不幸的是,当我必须使用多个前缀限制字段上的面时,这不起作用:

/select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=DocumentKind&f.DocumentKind.facet.prefix=manual&f.DocumentKind.facet.prefix=faq
我预计它将返回如下内容:

"facet_counts": {
    "facet_queries": {},
    "facet_fields": {
      "DocumentKind": {
        "faq": 1523,
        "manual": 2366
      }
      ...
http://localhost:8983/solr/techproducts/select?q=*%3A*&wt=json&indent=true&facet=true&facet.field=inStock
但它的输出与以前的相同

在上面的示例中,我匹配整个方面的值,但在实际用例中,我确实必须匹配前缀。为了简洁起见,我展示了这个例子


我可以在我的应用程序中过滤掉这一点,但Solr不必要地返回的数据量很大。

我在应用程序中遇到了类似的问题。该问题的解决方案是刻面局部参数。也就是说,如果我对Solr techproducts示例中的数据进行切面处理,以找出可用或不可用的产品数量
inStock
,我需要像这样运行查询:

"facet_counts": {
    "facet_queries": {},
    "facet_fields": {
      "DocumentKind": {
        "faq": 1523,
        "manual": 2366
      }
      ...
http://localhost:8983/solr/techproducts/select?q=*%3A*&wt=json&indent=true&facet=true&facet.field=inStock
我将得到以下结果,其中包括
inStock
字段中的所有词汇值:

...
"facet_counts":{
    "facet_queries":{},
    "facet_fields":{
      "inStock":[
        "true",17,
        "false",4]},
    "facet_dates":{},
...
但在您的例子中,您希望使用字段值的多个前缀来区分方面结果。在这里,局部参数是非常方便的工具。现在,如果我想根据
inStock
字段中的特定值进行传真,比如
true
false
,我需要使用
!按键
标记结果:

http://localhost:8983/solr/techproducts/select?q=*:*&wt=json&indent=true&facet=true&facet.field={!key=inStock_True+facet.prefix=true}inStock

...
"facet_counts":{
    "facet_queries":{},
    "facet_fields":{
      "inStock_True":[
        "true",17]},
    "facet_dates":{},
...
因此,在使用多个方面本地参数前缀查询数据之后:

/select?q=*:*&rows=0&wt=json&indent=true&facet=true&facet.field={!key=DocumentKind_manual+facet.prefix=manual}DocumentKind&facet.field={!key=DocumentKind_faq+facet.prefix=faq}DocumentKind
你会看到这样的结果:

...
    "facet_counts":{
        "facet_queries":{},
        "facet_fields":{
          "DocumentKind_faq":[
            "faq",1523],
          "DocumentKind_manual":[
            "manual",2366]},
...

我在申请中也遇到了类似的问题。该问题的解决方案是刻面局部参数。也就是说,如果我对Solr techproducts示例中的数据进行切面处理,以找出可用或不可用的产品数量
inStock
,我需要像这样运行查询:

"facet_counts": {
    "facet_queries": {},
    "facet_fields": {
      "DocumentKind": {
        "faq": 1523,
        "manual": 2366
      }
      ...
http://localhost:8983/solr/techproducts/select?q=*%3A*&wt=json&indent=true&facet=true&facet.field=inStock
我将得到以下结果,其中包括
inStock
字段中的所有词汇值:

...
"facet_counts":{
    "facet_queries":{},
    "facet_fields":{
      "inStock":[
        "true",17,
        "false",4]},
    "facet_dates":{},
...
但在您的例子中,您希望使用字段值的多个前缀来区分方面结果。在这里,局部参数是非常方便的工具。现在,如果我想根据
inStock
字段中的特定值进行传真,比如
true
false
,我需要使用
!按键
标记结果:

http://localhost:8983/solr/techproducts/select?q=*:*&wt=json&indent=true&facet=true&facet.field={!key=inStock_True+facet.prefix=true}inStock

...
"facet_counts":{
    "facet_queries":{},
    "facet_fields":{
      "inStock_True":[
        "true",17]},
    "facet_dates":{},
...
因此,在使用多个方面本地参数前缀查询数据之后:

/select?q=*:*&rows=0&wt=json&indent=true&facet=true&facet.field={!key=DocumentKind_manual+facet.prefix=manual}DocumentKind&facet.field={!key=DocumentKind_faq+facet.prefix=faq}DocumentKind
你会看到这样的结果:

...
    "facet_counts":{
        "facet_queries":{},
        "facet_fields":{
          "DocumentKind_faq":[
            "faq",1523],
          "DocumentKind_manual":[
            "manual",2366]},
...

谢谢!这正是我想要的!这正是我想要的