0

我有一个基本的 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>

帮助!

4

2 回答 2

0

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

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

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

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

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

于 2012-10-25T13:17:52.367 回答
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>
于 2012-10-25T13:43:38.253 回答