不是停止字符的 MongoDB 全文索引字符标记化分隔符

问题描述

假设我想在文本字段上有一个“文本索引”,如下用于部分搜索和高级搜索

"supertext": "a111=Salvador a111=Sal a111=Salv a111=Salva a111=Salvad a111=Salvado a113=Hernandez a113=Her a113=Hern a113=Herna a113=Hernan a11

似乎等号是解析器的标记化分隔符(停止字符)之一。此 MongoDB doc page 指 Unicode 8.0 字符数据库道具列表中的 Unicode 字符:Dash、Hyphen、Pattern_Syntax、Quotation_Mark、Terminal_Punctuation 和 White_Space:https://www.unicode.org/Public/8.0.0/ucd/PropList.txt

我想知道的是相反的情况。我可以使用哪些不是标记化分隔符的特殊字符?

我想在文本字段中找到“a111=Salvador”。现在,搜索“a111=Salvador”和仅搜索“Salvador”会返回相同或相似的分数。

比如我存储数据的时候还能用什么,比如:

a111#Salvador
a111@Salvador
a111`Salvador

似乎有人可能有这方面的经验,而不是我花几个小时在那个 Unicode 页面搜索不存在的字符。

或者我需要更长的字母字符系列,还是不需要字符?

a111valueSalvador
a111Salvador

解决方法

从当前主 https://github.com/mongodb/mongo/blob/eb2b72cf9c0269f086223d499ac9be8a270d268c/src/mongo/db/fts/unicode/gen_delimiter_list.py#L27 分隔符是:

delim_properties = [
    "White_Space","Dash","Hyphen","Quotation_Mark","Terminal_Punctuation","Pattern_Syntax","STerm"
]

这让您有很多其他符号可供选择。例如尝试中间点:

00B7          ; Other_ID_Continue # Po       MIDDLE DOT
0387          ; Other_ID_Continue # Po       GREEK ANO TELEIA

经过 U+00B7 测试 - a111·Salvador 可以胜任,而且看起来很整洁。

在python术语中:

separator = '\u00B7'
sample = "a111" + separator + "Salvador"
print(sample)