【问题标题】:solr query with white space带有空格的 solr 查询
【发布时间】:2011-08-13 00:12:06
【问题描述】:

我搜索一个词,我得到的结果与 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:Supply Chain Intermediaries 的结果。
我认为问题在于条件中的空间(供应链中介)。我也试过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

但我需要写多个值。没有raw的原始查询如下

http://localhost/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq=(itemtype:Company itemtype:Supply Chain Intermediaries)

你们能帮我解决这个问题吗?

【问题讨论】:

    标签: solr


    【解决方案1】:

    我猜你可以使用

    fq={!raw f=itemtype}Supply Chain Intermediaries
    

    为此目的

    对于 Solr 版本 >= 4.0,您必须使用 !term 而不是 !raw

    http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201012.mbox/%3C4D121F73.3090706@jhu.edu%3E

    祝你有美好的一天。

    【讨论】:

    • 我编写了新的 solr 查询。请您检查并提出建议。
    • @Brahmaji 您需要过滤器之间的 OR 操作还是 AND 操作?对于 AND,您可以简单地编写多个 fq 过滤器。但我猜你在 OR 上运气不太好。也许您可以尝试在双引号之间写下您的值,例如fq=text:"Chain Intermediaries"。不过我还没试过。
    【解决方案2】:

    您的 itemtype 字段是如何分析的?

    如果是字符串类型,则使用:

    fq=itemtype:"Supply Chain Intermediaries"
    

    否则你也可以试试:

    fq=itemtype:(Supply Chain Intermediaries)
    

    假设 OR 是您配置中的默认运算符,text 是默认搜索字段,您的查询将被翻译为:

    fq=itemtype:Supply OR text:(Chain Intermediaries)
    

    根据默认搜索字段搜索链和中介。

    【讨论】:

    • 这有帮助。谢谢。但是当我们有一些带有空格的字段名时怎么办?请指教。
    • +1 谢谢,顺便说一句,我使用的是lbdremy.github.io/solr-node-client,并且没有数组输入类型的转换,所以必须手动完成。
    • 我正在使用 Solr Criteria(fieldname).contains(value) 构建查询,但对我不起作用。有什么建议吗?
    【解决方案3】:

    这并不能直接回答这个问题,但它可能有助于解决这个问题:

    在发布到 Solr 之前删除空格。

    对于用于分面而非搜索的字段,用空格存储值并不重要。该值只是被视为键。像这样存储itemtype字段:"supplychainintermediaries", "monitorauditorfirm"

    当您向用户显示构面值时,只需使用将键值映射到显示值的字典即可。像这样:

    "supplychainintermediaries" --&gt; "Supply Chain Intermediaries" "monitorauditorfirm" --&gt; "Monitor/Auditor Firm"

    【讨论】:

      【解决方案4】:

      我尝试了这里提到的不同解决方案,但都没有奏效。但是我是这样解决的:

      fq=itemtype: *Supply\ Chain\ Intermediaries*
      

      这里的空格会被\转义

      上面的字符串将匹配字符串Lorem Supply Chain Intermediaries Ipsum

      如果您有一个单词以Supply Chain Intermediaries Ipsum 开头 那么就给

      fq=itemtype: Supply\ Chain\ Intermediaries*
      

      【讨论】:

        【解决方案5】:

        我通过替换解决了空白问题:

        $tmp[] = $name . ':' . $this->_escapeValue($value);
        

        与:

        $tmp[] = $name . ':' .'"'. $this->_escapeValue($value).'"';
        

        表示在SolrSource.php文件中的转义值后面加上引号。

        【讨论】:

          猜你喜欢
          • 2017-03-06
          • 2012-04-18
          • 1970-01-01
          • 2021-04-13
          • 1970-01-01
          • 1970-01-01
          • 2012-02-12
          • 1970-01-01
          • 2016-12-31
          相关资源
          最近更新 更多