我有一个基本的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>
帮助!
答案 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>