SOLR返回空查询的文档,但不返回真正的查询

时间:2012-10-25 13:10:14

标签: solr

我有一个基本的SOLR实例

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="my-solr" version="1.5">
  <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" indexed="true" />
    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" indexed="true"/>
  </types>

  <fields>
    <field name="id" type="string" indexed="true" stored="true" required="true" />
    <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
  </fields>

  <uniqueKey>id</uniqueKey>
</schema>

如果我从SOLR管理页面发出空查询,我会得到一些结果:

<response>
    <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
    <lst name="params">
    <str name="indent">on</str>
    <str name="start">0</str>
    <str name="q">*:*</str>
    <str name="version">2.2</str>
    <str name="rows">10</str>
    </lst>
    </lst>
    <result name="response" numFound="5" start="0">
        <doc><str name="id">1</str><arr name="title"><str>Test</str></arr></doc>
        <doc><str name="id">2</str><arr name="title"><str>Other Test</str></arr></doc>
    </result>
</response>

但是,如果我发出查询title:"test"(如果我的语法错误,请更正我),我什么都没得到。

<response>
    <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
    <lst name="params">
    <str name="indent">on</str>
    <str name="start">0</str>
    <str name="q">title:"test"</str>
    <str name="version">2.2</str>
    <str name="rows">10</str>
    </lst>
    </lst>
    <result name="response" numFound="0" start="0"/>
</response>

帮助!

2 个答案:

答案 0 :(得分:0)

确保在架构中标题字段设置为indexed =“true”。只能在查询中指定索引字段(并且只能请求返回存储=“true”的字段)。

如果您更改架构,我建议重新启动solr并重新索引所有内容。

从我在输出中看到的空查询看来,您似乎也将标题定义为多值/数组。在大多数情况下,这没有意义。标题栏的示例:

<field name="title" type="string" indexed="true" stored="true" required="true" multiValued="false"/>

请注意,您应该只“存储”稍后需要返回的字段。

答案 1 :(得分:0)

事实证明它没有以我预期的方式编制索引,因为我没有使用合适的分析器。我采用示例text_general中提供的示例schema.xml类型,这非常有用。这足以让你开始。转载于此。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>