我有一个包含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?
任何有用的帮助!
答案 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.