Solr 术语搜索不从多字段值中搜索所有值
Solr term search not searching all values from multifields value
我有 solr 字段
<field name="AllTitles" type="text_general" indexed="true" stored="false" multiValued="true"/>
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time -->
<filter class="solr.SynonymFilterFactory" synonyms="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" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
输入的 AllTitles 的值示例是
AllTitles: [ "Anything", "wuhan coronavirus", "anything" ]
AllTitles: [ "wuhan coronavirus", "anything", "anything" ]
它从第一个索引开始搜索,但如果索引上的任何匹配词不是第一个,那么它就不会搜索
例如当我搜索
q="wuhan coronavirus"
我得到 2 个结果。当我使用字段名称 "AllTitles"
进行搜索时
q=AllTitles:"wuhan coronavirus"
我正确地得到了 7 个结果。
谁能帮我找出问题所在?
首先,在您的 SolrConfig.xml 中检查 "df" 中定义了哪些字段。在下面的示例中,它是 "text".
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
</requestHandler>
其次,在 schema.xml 或托管架构中,无论您使用哪个,请确保已将 "AllTitles" 复制到 "text"。像这样,
<copyField source="AllTitles" dest="text"/>
您不妨在查询时将 "AllTitles" 添加到您的 "df" 参数来测试它,然后再执行所有这些操作,就像 raghu777 提到的那样。
我有 solr 字段
<field name="AllTitles" type="text_general" indexed="true" stored="false" multiValued="true"/>
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time -->
<filter class="solr.SynonymFilterFactory" synonyms="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" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
输入的 AllTitles 的值示例是
AllTitles: [ "Anything", "wuhan coronavirus", "anything" ]
AllTitles: [ "wuhan coronavirus", "anything", "anything" ]
它从第一个索引开始搜索,但如果索引上的任何匹配词不是第一个,那么它就不会搜索
例如当我搜索
q="wuhan coronavirus"
我得到 2 个结果。当我使用字段名称 "AllTitles"
进行搜索时q=AllTitles:"wuhan coronavirus"
我正确地得到了 7 个结果。
谁能帮我找出问题所在?
首先,在您的 SolrConfig.xml 中检查 "df" 中定义了哪些字段。在下面的示例中,它是 "text".
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
</requestHandler>
其次,在 schema.xml 或托管架构中,无论您使用哪个,请确保已将 "AllTitles" 复制到 "text"。像这样,
<copyField source="AllTitles" dest="text"/>
您不妨在查询时将 "AllTitles" 添加到您的 "df" 参数来测试它,然后再执行所有这些操作,就像 raghu777 提到的那样。