如何在Solr中的多值字段中执行搜索?

时间:2012-07-08 23:15:09

标签: search solr multivalue

我很难在Solr中执行搜索。我的Solr有一个多值字段,如下文所示:

<int name="id">2166324592435</int>
...others fields
<arr name="Series">
   <str>The Walking Dead<\str>
   <str>Game of Thrones<\str>
<\arr>

多值字段系列具有文档引用的Tv系列。在上面的例子中,我的文档描述了“行尸走肉”和“权力的游戏”。我可以拥有一个,两个或更多系列文件,甚至没有系列文件。

我想要做的是在Solr中搜索。我想给出我想要的系列,Solr应该返回关于我的查询的文档。我试过但我不能这样做。我尝试了以下内容:

q=series:The Walking Dead or series:Game of Thrones or ...&wt=json

我想我做错了。这样做的正确方法是什么?

提前致谢

蒂亚戈

5 个答案:

答案 0 :(得分:6)

尝试这样的事情:
series:("The Walking Dead" OR "Game of Thrones")

答案 1 :(得分:2)

除了@ user1452132的回答 -

当您搜索q=series:The Walking Dead时,在the搜索默认搜索字段时,系列字段中仅搜索walking dead

形成的查询将是系列:OR文本:(行尸走肉)

您可以使用请求网址中的debugQuery = on来调试查询。

您可以使用Dismax query handler使其更易于管理。

答案 2 :(得分:2)

使用fq参数(过滤查询),

E.g

    name:("Java" OR "Python")
    name:("Java" AND "Web")

    // multivalued fields
    author_ids:(1733 OR 58)
    author_ids:(1733 AND 58)

Solr url编码:

  • &#39;:&#39;成为&#39;%3A&#39;
  • 空间变为&#39; +&#39;

因此,您可能会得到这样的网址:

  

http://localhost:8983/solr/xxx/select?q=programming&fq=title%3A(&#34;爪哇&#34 + AND +&#34;网络&#34;)及重量= JSON&安培;缩进=真安培; DEFTYPE = edismax&安培; QF =标题&安培;停用词=真安培; lowercaseOperators =真

答案 3 :(得分:1)

根据搜索的目的,尝试以下两次搜索

系列:“行尸走肉”OR系列:“荆棘游戏”

系列:(行尸走肉)OR系列:(荆棘游戏)

请阅读solr query syntax和基础Lucene query syntax

答案 4 :(得分:0)

我认为您的实际问题是使用OR作为小写。当您执行此类操作时,会在or中搜索defaultTextField值。如果您的查询中有空格,也不要忘记放置引号 - 而且您正在寻找完全匹配。