数组字段的Solr查询语法

时间:2013-04-03 17:48:34

标签: solr solrnet solr-query-syntax

如何在数组字段中搜索?

我在使用solr 4.2时使用默认设置。 我使用SolrNet索引了一些html和pdf文档。以下是使用管理员搜索*:*

进行搜索时此类文档的示例结果
enter code here
<doc>
<str name="id">2</str>
<date name="last_modified">2011-12-19T17:33:25Z</date>
<str name="author">name</str>
<str name="author_s">name</str>
<arr name="title">
  <str>CALIFORNIA CODES</str>
</arr>
<arr name="content_type">
  <str>application/pdf</str>
</arr>
<str name="resourcename">T01041.pdf</str>
<arr name="content">
  <str> PDF text here </str>
</arr>
<long name="_version_">1431314431195742208</long>
</doc>

使用content:*进行搜索会返回0结果。

3 个答案:

答案 0 :(得分:12)

而不是content:*尝试使用content:[* TO *]。这将获取字段content非空的所有文档。

对于查询数组/多值字段,它取决于您想要做什么。如果您有一个多值字段,如:

<arr name="tag_names">
    <str>death</str>
    <str>history</str>
    <str>people</str>
    <str>historical figures</str>
    <str>assassinations</str>
</arr>

并且您希望找到同时将deathhistory作为tag_names的文档,然后发出类似

的查询
q=tag_names:(death AND history)

要进行OR,请使用

q=tag_names:(death OR history)

答案 1 :(得分:3)

你的问题的答案非常简单。

您的 Schema.xml 文件表示字段 name =“content”indexed =“false”即。您的内容字段无法搜索。因此,如果您搜索“内容”的任何内容,它将返回0结果。

请更改您的schema.xml文件,并将内容字段设为indexed =“true”,这样就可以使该字段具有可销售性。

保存文件
重启Solr。
清除索引。
重新索引文件

现在,您可以搜索内容:*

如果能解决问题,请接受答案......

答案 2 :(得分:-1)

text:*有效。它返回我的所有文档。

我从架构中得到了这个:

     <!-- Main body of document extracted by SolrCell.
        NOTE: This field is not indexed by default, since it is also copied to "text"
        using copyField below. This is to save space. Use this field for returning and
        highlighting document content. Use the "text" field to search the content. -->
   <field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>


   <!-- catchall field, containing all other searchable text fields (implemented
        via copyField further on in this schema  -->
   <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>