在Solar中的文本字段中使用字符串样式进行搜索



我有一个包含短文本(一些标记(的字段。我将其索引为Text而不是String,因为我需要在文本中搜索。

但是,我需要使用String样式进行搜索(匹配整个字段(。

例如,如果字段为Google Search Engine。我当前通过搜索";搜索引擎";。在保留这种行为的同时,我需要另一个选项来捕获行,仅当搜索项为"时;谷歌搜索引擎";。

我相信通过regex是可能的,但应该很慢。

我想知道是否有标准的方法可以做到这一点,或者我是否需要添加另一个内容相同但类型为String的字段。

使用多个字段-第二个字段的定义将根据您是否希望搜索区分大小写而有所不同。如果你同意使用区分大小写的字段(即"谷歌"one_answers"谷歌"是不同的术语(,那么string是正确的选择。

如果您希望字段不区分大小写,请使用带有KeywordTokenizer(将输入保持为单个大令牌(的TextField,并附加LowercaseFilter(将内容降低大小写(。

然后,您可以使用qf(查询字段(搜索这两个字段,并使用edismax/dismax查询解析对它们进行不同的评分。如果您只需要显式搜索(您可以选择是要匹配整个字符串,还是只匹配其中的单词(,则以常规方式使用字段名将起作用。

使用copyField指令在不更改索引管道的情况下,将相同内容索引到两个字段中。您需要为新字段重新建立核心/集合的索引才能获得任何值。

不,您不能用正则表达式来实现这一点,因为正则表达式是针对标记应用的。您已经将这些令牌分成了更小的部分,因此/foo bar/没有foo bar令牌可供匹配,只有foobar——它们都不匹配regex。

最新更新