想象一下,我有以下几个方面:
发言人:[Mike Thompson,Thomas Wilkinson,Sally Jeffers] 场地:[威尔托马斯医疗中心,BB& R医疗协会,KLR汤普森]
Solr似乎允许& facet.prefix = Thom,在那里我可以获得以“Thom”开头的方面,并且将返回“演讲者:Thomas Wilkinson”而不是其他人。
我怎样才能完成相同的& facet.substring = Thom,它将返回Mike Thompson和Weill Thomas ....
我试过& facet.query = Thom但这似乎根本不起作用。
由于
答案 0 :(得分:0)
由于您没有提供完整的查询字符串,因此无法确定,但可能是facet未在facet结果中返回Weill Thomas,因为您只在查询中指定了facet.field = speaker,并且威尔托马斯实际上是在场地领域。您需要在搜索查询中使用第二个facet.field = venues参数来检索这些参数。
Facet前缀仅用于在搜索完成后过滤结果,因此不要将该参数用于搜索目的。请检查此问题:SOLR facet search by prefix with results highlighting
根据评论进行编辑:
您不一定需要在事后过滤分面返回的结果,只需确保只有您想要的构面与原始查询匹配。如果返回所有方面,那么不属于搜索查询的构面将在它们上面出现0次。然后,您可以将facet.mincount = 1设置为仅获取在搜索结果中找到的构面。这是我用测试数据模拟的一个例子:
q=*Thom*&rows=0&df=speakers&wt=json&indent=true&facet=true&facet.field=speakers&facet.field=venues&facet.mincount=1&json.nl=map
Solr的回应:
"responseHeader": {
"status": 0,
"QTime": 3,
"params": {
"q": "*Thom*",
"df": "speakers",
"facet.field": [
"speakers",
"venues"
],
"json.nl": "map",
"indent": "true",
"facet.mincount": "1",
"rows": "0",
"wt": "json",
"facet": "true",
"_": "1431772681445"
}
},
"response": {
"numFound": 2,
"start": 0,
"docs": []
},
"facet_counts": {
"facet_queries": {},
"facet_fields": {
"speakers": {
"Mark Thomas": 1,
"Thomas Moore": 1
},
"venues": {
"Weill Thomas": 1
}
},
"facet_dates": {},
"facet_ranges": {},
"facet_intervals": {},
"facet_heatmaps": {}
}
答案 1 :(得分:0)
只是想指出所提出的解决方案的一个警告(即,基本上只是将您的facet子串查询作为主要的Solr查询,然后facet值将是您想要的)。这对多值字段无法正常工作。例如,如果一个文档有3个值的发音者,马克·托马斯","弗雷德·琼斯"," John Doe",那么查询&q; q = * *汤姆'将作为方面回归" Fred Jones"和#34; John Doe",以及#34; Mark Thomas",这不是理想的结果(即" Fred Jones"和#34; John Doe& #34;不应退还)。因此对于单值字段,此解决方案可以工作,但对于多值字段,您可能必须编写一个中间Web服务来过滤掉不匹配(例如" Fred Jones"和&#34 ; John Doe")。 Solr应该添加一个facet.substring参数,该参数与facet.prefix参数类似,但是对facet值进行子串过滤而不是前缀过滤。