我在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
但这不起作用!你能指导我怎么做这个搜索吗? 谢谢你的帮助
答案 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
表示目录,则无效。