2016-11-22 134 views
0

我正试图在仅包含字符串1604-04的标题中搜索Solr中的术语。但结果会返回任何包含1604或04的结果。语法是什么将迫使solr搜索1604-04的确切字符串?Solr使用连字符精确搜索

回答

0

您还可以使用经典标记生成器 .The经典标记生成器保留了相同的行为标准分词器但下列情况除外: -

字在连字符分割,除非有字的数,在这种情况下,令牌不会被拆分,并且保留数字和连字符(012)。

这意味着如果有人搜索1604-04那么这个Tokenizer不会将搜索字符串分解为两个标记。

+0

谢谢。这个标记器做了诀窍。 – pcroadkill

1

如果只需要精确匹配,请使用字符串字段或带有KeywordTokenizer的文本字段作为标记器。这些将令您的令牌保持原样,并且不会将其分解为多个令牌。

不同之处在于,如果您将Textfield与KeywordTokenizer结合使用,则仍然可以应用其他过滤器(例如LowercaseFilter),而字符串字段将逐字存储任何内容,而无需进行任何进一步处理。

+0

非常感谢。它引导我们找到正确的解决方案。我们实际上最终使用了Classic Tokenizer。 – pcroadkill

0

您的分析仪将“1604-04”分为两个术语“1604”和“04”。您已经收到关于如何更改分析以停止这样做的答案。

更改你的分析我不是最好的解决方案(不能完全确定根据你写的内容)。使用phrase query将是通常的做法。您可以通过在引号包裹它使用短语查询:

field:"1604-04" 

这仍然将分析,并将其分为两个方面,但它会寻找在序列这些条款。所以,该查询将匹配“1604-04”和“1604 04”,但是而不是“1604某些其他的东西04”。