如何操作发送给Solr的查询字符串?
例如,有人输入" stackoverflow-version1.0"但是没有找到结果。但是,如果查询只是" stackoverflow"搜索本来是成功的。 所以我想截断" - "并再次搜索第一部分。
一些研究将我带到 solr.PatternReplaceCharFilterFactory 类。我把它包含在我的schema.xml中,如下所示。有谁看到,为什么我的查询仍然没有产生任何结果?我应该使用的其他课程吗?
更新: 现在我的代码如下所示:
<fieldType name="ngram" class="solr.TextField" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="20" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
splitOnNumerics="0"
generateNumberParts="0"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
preserveOriginal="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="0"
splitOnNumerics="0"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
preserveOriginal="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
答案 0 :(得分:1)
您可以尝试 WordDelimiterFilterFactory ,它有很多可以尝试的选项......
您可以为您的字段尝试以下字段类型。
<fieldtype name="subword" class="solr.TextField">
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
preserveOriginal="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="0"
preserveOriginal="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
</analyzer>
</fieldtype>
在这里你可以玩 WordDelimiterFilterFactory
添加FieldType后,将其应用于该字段。
重新启动服务器,您可以在solr分析页面中分析输入和输出。在solr分析页面上,它将显示如何为索引和查询时给出的输入生成令牌。
这将帮助您根据自己的要求构建自己的自定义字段类型。
以下链接列出了所有标记器和过滤器的示例。 analyzers