Text 在Solr中搜索编号/产品代码

Text 在Solr中搜索编号/产品代码,text,indexing,solr,numbers,querying,Text,Indexing,Solr,Numbers,Querying,我有一个文本字段,向其中输入包含产品代码的普通文本,如FI302010、RR220011等。 我想能够搜索这些产品编号。 我已经在分析工具中尝试过了——在这里,它看起来应该是可能的。一个标准文本字段会进行一些单词分隔,将产品代码拆分为FI和302010,但只要在查询和索引中发生相同的情况,就不会有问题。 当我查看模式浏览器时,我找不到产品代码,但我可以找到类似代码的词干版本的内容,即30201-缺少最后一个0 我尝试过使用不同的文本类型text_ws、textTight和text,但没有一种允许

我有一个文本字段,向其中输入包含产品代码的普通文本,如FI302010、RR220011等。 我想能够搜索这些产品编号。 我已经在分析工具中尝试过了——在这里,它看起来应该是可能的。一个标准文本字段会进行一些单词分隔,将产品代码拆分为FI和302010,但只要在查询和索引中发生相同的情况,就不会有问题。 当我查看模式浏览器时,我找不到产品代码,但我可以找到类似代码的词干版本的内容,即30201-缺少最后一个0

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

如何在文本中启用文本搜索


谢谢

似乎您需要配置此字段以使用solr.KeywordTokenizerFactory作为其标记器。 由于名称并没有真正传达,这个标记器将把底层字段作为一个单独的标记来处理,留下空格、字母到数字、数字到字母的转换、标点符号和所有标记,除非您也有用于这些标记的字符过滤器

我不了解配置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等定义一个相当具体的分析器,以提高这些字段的召回率,因为用户并不总是知道这些标识符的具体格式,其中应使用标点符号和其他分隔符(如有)


但是,使用不同的分析器的问题是,它会阻止将字段与常规文本搜索相关联,因为在很平常的时候,只有一种方法可以处理用户的查询。

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

以Solr1.4.1为例,运行示例配置,您可以看到,正如您所说的,分析工具显示这适用于stock文本字段

然后,为了验证,请注意示例架构中的features字段的类型为text。在apache-solr-1.4.1/example/exampledocs中编辑一个示例文件。比如monitor.xml。将产品代码添加到一个文档的“功能”字段中。两边各有一个空间

使用java-jar Post.jar monitor.xml将文件发布到Solr。现在去寻找它。它起作用了。检查架构浏览器。在“功能”字段中显示所有术语。请注意,在一个术语中,数字本身就存在

这一切都对我有用

不确定你的模式浏览器发生了什么,可能是打字错误?数字没有词干。尾随字符是o字母而不是零,这可能是您的问题


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

我在这里找到了解决方案:

结果是solr将文档截断为10000个单词,因此我必须增加solrconfig.xml中的maxFieldLength设置

谢谢你的意见