Solr:如何在facet中搜索子字符串

时间:2011-11-17 09:35:33

标签: solr facet

我在solr DB中有国家/地区字段来代表与此项目相关的国家/地区。国家名单是PIPE分开的 例如:
<arr name="country"> <str>France | United Kingdom | Norway | UAE </str> </arr> 和另一个项目如 <arr name="country"> <str>Australia | Belgium | Argentina </str> </arr>
现在我需要搜索所有与英国相关的项目 OR 比利时 我试过这个

http://127.0.0.1:8888/solr/MyDb/select/?q=*:*&version=2.2&start=0&rows=10&indent=on&facet=true&fq=country:United+Kingdom+OR+Belgium

但这不起作用!你能指导我怎么做这个搜索吗? 谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

对国家/地区字段@索引和查询时间执行的分析是什么?

会建议 -

索引国家和多值而不是由|分隔。 使用带最小分析的fieldType或字段类型字符串进行过滤

<field name="country" type="string" indexed="true" stored="true" multiValued="true"/>

过滤查询应与

一起使用
fq=country:Norway
fq=country:("United Kingdom" OR Belgium)

答案 1 :(得分:1)

对于这个特定的数据,多值字段是正确的答案,但我想说一些关于pipe个分隔字段的内容。我已经使用了这些,但总是要扁平化对象层次结构,例如将货币金额表示为GBP | 75000或维度为ft | 14.

在一个案例中,我用它来表示一个XML文档的一部分,它包含7个不同标签的各种组合,所以我使用了一个带有7个项目的管道分隔列表的单个字段。例如:

Promotion|||December Days||773635554238
|quarterpage|||||883736656534

关于所有这些示例的一点是,项目列表中的位置是固定的,即货币代码始终是第一个,或者营销ID始终是最后的。这意味着您可以可靠地搜索GBP|*之类的内容,以查找包含英镑货币或*|quarterpage|*的所有文档,以查找包含季度页面广告的所有文档。

最后一个示例的一个缺点是,您必须小心在Marketing字段中的7个项目的所有不同用途中使用全局唯一术语,这会导致更长的术语,从而导致更高的RAM使用率。如果有时cat表示类别,有时cat表示目录,则无效。