我有一个包含短文本(一些标记(的字段。我将其索引为Text
而不是String
,因为我需要在文本中搜索。
但是,我需要使用String样式进行搜索(匹配整个字段(。
例如,如果字段为Google Search Engine
。我当前通过搜索";搜索引擎";。在保留这种行为的同时,我需要另一个选项来捕获行,仅当搜索项为"时;谷歌搜索引擎";。
我相信通过regex是可能的,但应该很慢。
我想知道是否有标准的方法可以做到这一点,或者我是否需要添加另一个内容相同但类型为String
的字段。
使用多个字段-第二个字段的定义将根据您是否希望搜索区分大小写而有所不同。如果你同意使用区分大小写的字段(即"谷歌"one_answers"谷歌"是不同的术语(,那么string
是正确的选择。
如果您希望字段不区分大小写,请使用带有KeywordTokenizer(将输入保持为单个大令牌(的TextField,并附加LowercaseFilter(将内容降低大小写(。
然后,您可以使用qf
(查询字段(搜索这两个字段,并使用edismax/dismax查询解析对它们进行不同的评分。如果您只需要显式搜索(您可以选择是要匹配整个字符串,还是只匹配其中的单词(,则以常规方式使用字段名将起作用。
使用copyField
指令在不更改索引管道的情况下,将相同内容索引到两个字段中。您需要为新字段重新建立核心/集合的索引才能获得任何值。
不,您不能用正则表达式来实现这一点,因为正则表达式是针对标记应用的。您已经将这些令牌分成了更小的部分,因此/foo bar/
没有foo bar
令牌可供匹配,只有foo
和bar
——它们都不匹配regex。