所以,我有一个 Solr 实例,它使用StandardTokenizer(以及ClassicFilterfactory,LowercaseFilterFactory和Stopfilterfactory)处理输入和查询。
在我的索引中有许多文件名用下划线分隔(例如some_indexed_file.jpg)。
我注意到如果我查询some_indexed_file.jpg,我会正确返回我正在寻找的文件。
但是,如果我交替搜索some_indexed_file.jp*, (带有星号,我认为它是通配符),据我所知应该会产生类似的结果,我没有得到任何结果。
知道发生了什么:我想我对 solr 处理查询的方式有误解吗?
编辑:根据要求,这里是架构 XML 配置条目:
<fieldType name="default" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.ClassicFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StopFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.ClassicFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StopFilterFactory" />
</analyzer>
</fieldType>
<field name="filename" type="default" multiValued="true" omitNorms="false" termVectors="false"/>
Run Code Online (Sandbox Code Playgroud)
好吧,更多的研究已经解决了这个问题:根本问题是 Solr 没有将文本分析应用于通配符查询。
这意味着它正在寻找与 完全匹配的some_indexed_file.jp*。但是,当文件名被索引时,它被标记为“some”“indexed”和file.jpg,这与该搜索词不匹配。
搜索some_indexed_file.jpg被正确标记,因此返回正确的结果。