lucene solr - 如何知道查询中每个单词的numCount

时间:2016-08-09 14:35:35

标签: solr lucene

我有一个包含5个单词的查询字符串。例如"猫狗鱼类动物"。

我需要知道每个单词有多少匹配。

此时我创建了5个查询:

/q=name:cat&rows=0&facet=true
/q=name:dog&rows=0&facet=true
/q=name:fish&rows=0&facet=true
/q=name:bird&rows=0&facet=true
/q=name:animals&rows=0&facet=true

并获取每个查询中每个单词的匹配数。

但这种方法需要花费太多时间。

那么有没有办法用一个查询来检查每个单词的获取numCount?

任何有用的帮助!

1 个答案:

答案 0 :(得分:1)

在这种情况下,functionQueries是您的朋友。特别是:

  

termfreq(field,term) 会返回该字词在该字段的字段中显示的次数。语法示例:   termfreq(文字,'记忆')

     

totaltermfreq(field,term) 会返回该字词在整个索引中字段中显示的次数。 ttf是别名   totaltermfreq。语法示例:ttf(text,'memory')

以下查询:

q=*%3A*&fl=cntOnSummary%3Atermfreq(summary%2C%27hello%27)+cntOnTitle%3Atermfreq(title%2C%27entry%27)+cntOnSource%3Atermfreq(source%2C%27activities%27)&wt=json&indent=true

返回以下结果:

"docs": [
      {
        "id": [
          "id-1"
        ],
        "source": [
          "activities",
          "activities"
        ],
        "title": "Ajones3 Activity Entry 1",
        "summary": "hello hello",
        "cntOnSummary": 2,
        "cntOnTitle": 1,
        "cntOnSource": 1,
        "score": 1
      },
  {
        "id": [
          "id-2"
        ],
        "source": [
          "activities",
          "activities"
        ],
        "title": "Common activity",
        "cntOnSummary": 0,
        "cntOnTitle": 0,
        "cntOnSource": 1,
        "score": 1
      }
}
]

请注意,虽然它在单值字段上运行良好,但似乎对于多值字段,函数只考虑第一个条目,例如在上面的示例中,termfreq(source%2C%27activities%27)返回1而不是2.