从Solr4迁移到Solr6,字段查询不返回任何结果

时间:2017-10-05 20:33:16

标签: solr

我将我的网站迁移到了一个全新版本的新版本(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”省略了。

0 个答案:

没有答案