我将我的网站迁移到了一个全新版本的新版本(Ubuntu上的LAMP)。当我使用诸如
之类的查询在旧网站(Solr 4)上进行搜索时authortext:fred
我得到了很多结果。使用新站点(Solr 5),我得到零结果(注意数据是相同的)。但是,如果我使用非常具体的查询,例如
authortext:Fred Smith FredSmith
然后我在Solr 4和&amp ;;上得到了相同的结果。 6.所以IOWs,Solr6实现只支持字段搜索的精确字符串。请注意,此特定字段在schmema中定义为“text”。这两种模式(大多数)都是相同的 - 新版本中包含更多内容。我正在使用Solr管理员运行这些查询。
这是schema.xml的相关部分:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!--<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>-->
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<field name="text" type="text" indexed="true" stored="false" multiValued="true"/>
<field name="authortext" type="text" indexed="true" stored="true" />
在旧的Solr 4上,如果我使用通配符*fred*
包围fred,我会收到错误,但是如果我将它们转义\*fred\*
则会有效。在新的Solr 6上,它实际上返回的结果与旧的Solr 4站点上的裸“fred”相同,但它仍然区分大小写 - 必须使用*Fred*
。所以,似乎我可以改变我的PHP代码,将通配符添加到传递给Solr的字段字符串(并剪切第一个字符),但这是一个可怕的黑客。我假设有一些神秘的新配置有一个令人不快的默认值(这种现象让我多次设置新实例)?
Solr6的调试输出:
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"authortext:fred",
"indent":"on",
"wt":"json",
"debugQuery":"on",
"_":"1507235204701"}},
"response":{"numFound":0,"start":0,"docs":[]
},
"debug":{
"rawquerystring":"authortext:fred",
"querystring":"authortext:fred",
"parsedquery":"authortext:fred",
"parsedquery_toString":"authortext:fred,
"explain":{},
"QParser":"LuceneQParser",
(我省略了时间段,因为它只是一堆0.0秒)
从Solr4调试:
[Lots of response elements omitted]
<lst name="debug">
<str name="rawquerystring">authortext:fred</str>
<str name="querystring">authortext:fred</str>
<str name="parsedquery">authortext:fred</str>
<str name="parsedquery_toString">authortext:fred</str>
<lst name="explain">
<str name="68665">
4.998859 = (MATCH) fieldWeight(authortext:fred in 45574), product of: 1.4142135 = tf(termFreq(authortext:fred)=2) 8.079376 = idf(docFreq=131, numDocs=110520) 0.4375 = fieldNorm(field=authortext, doc=45574)
</str>
....更多“MATCHES”省略了。