单个facet字段上的多个facet.prefix

Mar*_*rek 0 solr facet faceted-search

我正在创建一个搜索应用程序,它集中使用Solr(5.2.1)分面功能.一个要求是限制指定字段的前缀返回的facet数.

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

/select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=DocumentKind&f.DocumentKind.facet.prefix=faq
Run Code Online (Sandbox Code Playgroud)

输出:

"facet_counts": {
    "facet_queries": {},
    "facet_fields": {
      "DocumentKind": {
        "faq": 1523
      }
      ...
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我必须使用多个前缀限制字段上的facet时,这不起作用:

/select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=DocumentKind&f.DocumentKind.facet.prefix=manual&f.DocumentKind.facet.prefix=faq
Run Code Online (Sandbox Code Playgroud)

我预计它会返回这样的东西:

"facet_counts": {
    "facet_queries": {},
    "facet_fields": {
      "DocumentKind": {
        "faq": 1523,
        "manual": 2366
      }
      ...
Run Code Online (Sandbox Code Playgroud)

但它提供与以前相同的输出.

在上面的例子中,我匹配整个facet值,但在实际使用情况下,我真的必须匹配前缀.为简洁起见,我展示了这个例子.

我可以在我的应用程序中对此进行过滤,但Solr返回的数据大小非常重要.

小智 8

我的申请中遇到了类似的问题.该问题的解决方案是方面本地参数.即如果我正面对来自Solr techproducts示例的数据,以找出可用或不可用的产品数量,inStock我需要运行如下查询:

http://localhost:8983/solr/techproducts/select?q=*%3A*&wt=json&indent=true&facet=true&facet.field=inStock
Run Code Online (Sandbox Code Playgroud)

我将获得以下结果,其中包括来自inStock字段的所有dictinct值:

...
"facet_counts":{
    "facet_queries":{},
    "facet_fields":{
      "inStock":[
        "true",17,
        "false",4]},
    "facet_dates":{},
...
Run Code Online (Sandbox Code Playgroud)

但在您的情况下,您希望使用多个前缀来区分分面结果以获取字段值.在这里,当地的params是非常方便的工具.现在,如果我想根据inStock字段中的特定值进行指示,true或者false我需要!key用来标记结果:

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":{},
...
Run Code Online (Sandbox Code Playgroud)

因此,在使用多个facet local params前缀查询数据之后:

/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
Run Code Online (Sandbox Code Playgroud)

你会看到这样的结果:

...
    "facet_counts":{
        "facet_queries":{},
        "facet_fields":{
          "DocumentKind_faq":[
            "faq",1523],
          "DocumentKind_manual":[
            "manual",2366]},
...
Run Code Online (Sandbox Code Playgroud)