【问题标题】:Searching for numbers/product codes in Solr在 Solr 中搜索数字/产品代码
【发布时间】:2011-05-24 18:53:16
【问题描述】:
我有一个文本字段,我正在向其中输入包含产品代码(例如 FI302010、RR220011 等)的普通文本。
我希望能够搜索这些产品编号。
我已经在 ANALYSIS-tool 中尝试过 - 在这里看起来应该是可能的。标准文本字段会进行一些单词分隔,将产品代码拆分为“FI”和“302010”——但只要查询和索引都发生同样的情况,这应该不是问题。
当我查看架构浏览器时,我找不到产品代码,但我可以找到看起来像代码的词干版本的东西(即 30201 - 最后一个 0 丢失)。
我尝试过使用不同的文本类型(text_ws、textTight 和 text) - 但没有一个允许我进行搜索。
我应该如何在文本中启用文本搜索?
谢谢
【问题讨论】:
标签:
text
indexing
solr
numbers
querying
【解决方案1】:
您似乎需要将此字段配置为使用 solr.KeywordTokenizerFactory 作为其标记器。
由于名称并没有真正传达,这个标记器会将基础字段作为一个单独的标记处理,留下空格、字母到数字、数字到字母的转换、标点符号等等(除非你也有 char过滤器)。
我不了解配置 Solr 的最新细节,但我猜该字段的架构中的条目可能看起来像这样:
<fieldtype name="myProductNumberFIeld" class="solr.TextField">
<analyzer>
<!-- can have a few filters of course -->
<charFilter class="solr.MappingCharFilterFactory"
mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<!-- etc. -->
<!-- That's the main thing you need -->
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldtype>
更一般地,您需要为产品编号、零件编号、UPC 等定义一个相当具体的分析器,以提高对这些字段的召回率,因为用户并不总是知道这些标识符的特定格式 (标点符号和其他分隔符(如果有的话)应该是等等)。
然而,使用不同的分析器的问题在于,它会阻止将字段与一般文本搜索相关联,因为在琐碎的时间,只能有一种方法来处理用户的查询。
【解决方案2】:
这实际上只适用于示例配置。
查看 Solr 1.4.1 并运行示例配置,您可以看到,正如您所说,分析工具显示这适用于股票文本字段。
然后,为了验证,请注意示例架构中的“功能”字段是文本类型。编辑 apache-solr-1.4.1/example/exampledocs 中的示例文件之一。说“monitor.xml”。将产品代码添加到一个文档的 features 字段中。 (两边各留一个空格)
将文件发布到 Solr(使用 java -jar post.jar monitor.xml)。现在去寻找它。有用。检查模式浏览器。显示特征字段中的所有术语。请注意,数字本身就存在于一个术语中。
这一切都适合我。
不确定您的架构浏览器发生了什么,也许是错字?数字不是词干的。如果尾随字符是 o(字母)而不是零,那可能是您的问题。
使用keywordtokenizer 将无法找到产品代码的数字部分,这是最初的问题。