背景:
我有这个词:ABCDEF
。我需要找到所有文件的姓名(字段:NAME
)与ABCDEF
具有一定数量的字母。示例:ABCDEF
应匹配4个字母的匹配:
ABCDEF
,ABCD
,BCDE
等); B..A.DE...
,..F..A.DE...
- 其中的点是其他字母,而不是ABCDEF
中的字母。 我会尝试使用正则表达式(例如:^(.?)([ABCDEF] (.?)){4}$
),但这也会匹配A..A..B..C
(A
有两次)并且我不需要这个。
该字段的类型为string
。但是,添加另一个要进行标记化和索引编制的字段不会有问题。
此外,模糊搜索/匹配不是一个选项 - 因为我需要那些确切的字母出现在匹配的字段中。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
将每个唯一字母(或键)作为单独的标记索引 - 您可以在索引代码中将其拆分,或使用更新处理器将字段拆分为字符。请务必使用不会丢弃短令牌的字段类型(例如停用词)。
如果每个字母/键都有一个字段,请使用mm
参数(e)dismax来提供必须匹配的字词数,并提供要搜索的字母/键。单独的条款。
Index: ABCDEF
Document: field: (A, B, C, D, E, F)
Query: BCDF
/select?q=B C D F&mm=4&defType=dismax
Query: BCDF, at least two must match
/select?q=B C D F&mm=2&defType=dismax