我有一个文本字段,我正在提供包含产品代码的普通文本(例如FI302010,RR220011等)。 我希望能够搜索这些产品编号。 我已经在ANALYSIS-tool中尝试过了 - 在这里它看起来应该是可能的。标准文本字段执行一些单词分隔,将产品代码拆分为“FI”和“302010” - 但只要在查询和索引中都发生相同的情况,它就不应该成为问题。 当我查看架构浏览器时,我无法找到产品代码,但我可以找到一些看起来像代码的词干版本(即30201 - 缺少最后的0)。
我尝试过使用不同的文本类型(text_ws,textTight和text) - 但没有人会允许我进行搜索。
如何在文本中启用文本搜索?
由于
答案 0 :(得分:4)
似乎您需要配置此字段以使用 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等定义一个相当具体的分析器,作为改善对这些字段的召回的一种方法,因为用户并不总是知道这些标识符的特定格式(标点符号和其他分隔符(如果有的话)应该是等等。)。
然而,具有不同分析器的问题在于它阻止将字段与一般文本搜索相关联,因为在重要时间,只能有一种方法来处理用户的查询。
答案 1 :(得分:1)
我在这里找到了解决方案:http://search-with-fast-and-solr.blogspot.com/2010/12/maxfieldlength-in-solr.html
原来,solr正在以10000字截断文档 - 所以我不得不在solrconfig.xml中增加maxFieldLength设置
感谢您的投入!
答案 2 :(得分:0)
这实际上只适用于示例配置。
检索Solr 1.4.1并运行示例配置,您可以看到,正如您所说,分析工具显示这适用于股票文本字段。
然后,要验证,请注意示例模式中的“features”字段是text类型。编辑apache-solr-1.4.1 / example / exampledocs中的一个示例文件。说“monitor.xml”。将产品代码添加到一个文档的features字段中。 (以及两边的空格)
将文件发布到Solr(使用java -jar post.jar monitor.xml)。现在去搜索它。有用。检查架构浏览器。显示功能字段中的所有条款。请注意,该数字本身就是一个术语。
一切都适合我。
不确定您的架构browswer发生了什么,也许是一个错字?数字不是阻止的。尾随字符是o(字母)而不是零,这可能是你的问题。
使用keywordtokenizer不允许您查找产品代码的数字部分,这是原始问题。