我搜索一个单词,然后我用facet得到结果如下
<lst name="itemtype">
<int name="Internal">108</int>
<int name="Users">73</int>
<int name="Factory">18</int>
<int name="Supply Chain Intermediaries">6</int>
<int name="Company">1</int>
<int name="Monitor/Auditor firm">0</int>
</lst>
然后我写了像 fq = itemtype:Factory 这样的条件我得到了结果。但我没有得到 fq = itemtype:供应链中介 的结果。我正在考虑条件中的空间问题(供应链中介),我尝试使用urlencode(空格替换为%20)。但没用。你能帮我解决这个问题。
对于单值,它工作正常。我像这样构建查询
http:localhost:8080/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq={!raw f=itemtype}Supply Chain Intermediaries
但我需要写多个值。没有原始的原始查询如下
http://localhost/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq=(itemtype:Company itemtype:Supply Chain Intermediaries)
请你帮我解决这个问题。
答案 0 :(得分:34)
您的itemtype字段是如何分析的?
如果是string类型,请使用:
fq=itemtype:"Supply Chain Intermediaries"
否则你也可以尝试:
fq=itemtype:(Supply Chain Intermediaries)
假设OR
是您配置中的默认运算符,text
是默认搜索字段,您的查询将转换为:
fq=itemtype:Supply OR text:(Chain Intermediaries)
根据默认搜索字段搜索链和中介。
答案 1 :(得分:14)
我尝试过这里提到的不同解决方案,但都没有奏效。但是我解决了这个问题:
fq=itemtype: *Supply\ Chain\ Intermediaries*
此处空格将使用\
上述字符串将与字符串Lorem Supply Chain Intermediaries Ipsum
如果您的单词以Supply Chain Intermediaries Ipsum
开头
然后给出
fq=itemtype: Supply\ Chain\ Intermediaries*
答案 2 :(得分:2)
这不能直接回答这个问题,但它可能有助于解决这个问题:
在发布到Solr之前删除空格。
对于用于分面而不是搜索的字段,使用空格存储值并不重要。该值仅被视为关键。存储字段itemtype
,如下所示:"supplychainintermediaries", "monitorauditorfirm"
等。
当您向用户显示构面值时,只需使用将键值映射到显示值的字典。像这样:
"supplychainintermediaries" --> "Supply Chain Intermediaries"
"monitorauditorfirm" --> "Monitor/Auditor Firm"
答案 3 :(得分:1)
我想你可以使用
fq={!raw f=itemtype}Supply Chain Intermediaries
为此目的
它确定你必须使用!term而不是!raw for Solr version&gt; = 4.0
http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201012.mbox/%3C4D121F73.3090706@jhu.edu%3E
度过愉快的一天。
答案 4 :(得分:0)
我通过替换:
修复了空白问题$tmp[] = $name . ':' . $this->_escapeValue($value);
with:
$tmp[] = $name . ':' .'"'. $this->_escapeValue($value).'"';
通过在SolrSource.php
文件中的转义值之后添加引号来表示。