2

我有一个文本字段,我正在向其中输入包含产品代码(例如 FI302010、RR220011 等)的普通文本。我希望能够搜索这些产品编号。我已经在 ANALYSIS-tool 中尝试过了 - 在这里看起来应该是可能的。标准文本字段会进行一些单词分隔,将产品代码拆分为“FI”和“302010”——但只要查询和索引都发生同样的情况,这应该不是问题。当我查看模式浏览器时,我找不到产品代码,但我可以找到看起来像代码的词干版本的东西(即 30201 - 最后一个 0 缺失)。

我尝试过使用不同的文本类型(text_ws、textTight 和 text)——但没有一个允许我进行搜索。

我应该如何在文本中启用文本搜索?

谢谢

4

3 回答 3

4

似乎您需要将此字段配置为使用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 等定义一个相当具体的分析器,作为提高这些字段的召回率的一种方式,因为用户并不总是知道这些标识符的特定格式(标点符号和其他分隔符,如果有的话,应该是等)。

然而,使用不同的分析器的问题是它会阻止将字段与一般文本搜索相关联,因为在微不足道的时候,只能有一种方法来处理用户的查询。

于 2010-12-13T17:01:37.340 回答
1

我在这里找到了解决方案:http ://search-with-fast-and-solr.blogspot.com/2010/12/maxfieldlength-in-solr.html

原来 solr 将文档截断为 10000 字 - 所以我不得不增加 solrconfig.xml 中的 maxFieldLength 设置

感谢您的输入!

于 2010-12-14T10:01:16.293 回答
0

这实际上只适用于示例配置。

以股票 Solr 1.4.1 为例,运行示例配置,您可以看到,正如您所说,分析工具显示这适用于股票文本字段。

然后,为了验证,请注意示例模式中的“功能”字段是文本类型。编辑 apache-solr-1.4.1/example/exampledocs 中的示例文件之一。说“monitor.xml”。将产品代码添加到一个文档的 features 字段中。(和两边的空间)

将文件发布到 Solr(使用 java -jar post.jar monitor.xml)。现在去寻找它。有用。检查模式浏览器。显示特征字段中的所有术语。请注意,数字本身就存在于一个术语中。

这一切都对我有用。

不确定您的模式浏览器发生了什么,也许是错字?数字不是词干的。如果尾随字符是 o(字母)而不是零,那可能是您的问题。

使用keywordtokenizer 将不允许您找到产品代码的数字部分,这是最初的问题。

于 2010-12-14T08:04:16.720 回答