Solr:操作查询字符串
Solr: manipulate query string
如何操作发送到 Solr 的查询字符串?
比如有人输入"Whosebug-version1.0",但是不会有结果。但是,如果查询仅为 "Whosebug",则搜索会成功。
所以我想在“-”处截断并再次搜索第一部分。
一些研究将我带到了 solr.PatternReplaceCharFilterFactory class。我将其包含在我的 schema.xml 中,如下所示。有谁看到,为什么我的查询仍然没有产生任何结果?我还应该使用其他 classes 吗?
更新:
现在我的代码如下所示:
<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>
运行 分析器给了我这个:
此处查询 UI:
你可以试试 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 分析页面上,它将向您展示如何为索引和查询时给定的输入生成令牌。
这将帮助您根据需要构建自己的自定义字段类型。
这里是 link,其中列出了所有分词器和过滤器的示例。
analyzers
如何操作发送到 Solr 的查询字符串?
比如有人输入"Whosebug-version1.0",但是不会有结果。但是,如果查询仅为 "Whosebug",则搜索会成功。 所以我想在“-”处截断并再次搜索第一部分。
一些研究将我带到了 solr.PatternReplaceCharFilterFactory class。我将其包含在我的 schema.xml 中,如下所示。有谁看到,为什么我的查询仍然没有产生任何结果?我还应该使用其他 classes 吗?
更新: 现在我的代码如下所示:
<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>
运行 分析器给了我这个:
此处查询 UI:
你可以试试 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 分析页面上,它将向您展示如何为索引和查询时给定的输入生成令牌。
这将帮助您根据需要构建自己的自定义字段类型。
这里是 link,其中列出了所有分词器和过滤器的示例。 analyzers