1. 查询串为 纯汉字,查询出被拆分为单个字,然后使用全文检索,尽可能找出包含所有查询串的 POI,查找范围为POI拥有的所有文本信息。
例如搜索 “顺轩”,返回结果为:
而搜索“轩顺”,返回结果为:
两个搜索返回的结果是一致的 --- 包含查询串的POIs;返回列表的排序规则可以总结为:
a.
POI中查询出是否按照查询串中的顺序连续全部出现
b.
名称包含优先于地址包含
c. 匹配发生在 名称,标签,地址 等
2. 查询串为 纯拼音
,
不对查询串(拼音串)进行任何拆分
例子1,shuguang
例子2,shuguan
例子3,caguan
例子4,canguan(餐馆)
上海站全部商户中,没有找到"canguan"(0)
例子5,cacanting
例子6,xijiaobailian(西郊百联)
例子7,xijiaobalian
例子8,xijiaoblian
上海站全部商户中,没有找到"xijiaoblian"(0)
由上面的例子,可以大概推测如下:
a.
内部有一个 pre-defined 词典,保存了 词和拼音 映射关系,
b.
首先使用 拼音 进行匹配搜索,匹配策略可能是:
b1. 精准匹配
b2. 包含匹配
b3. 模糊匹配(最小编辑距离 < 某个阙值,比如2,参考例子6,7,8,读者可自行尝试其他组合)
b4. 没有找到任何匹配,即返回空,参考例子4.(canguan竟然没有,很让人费解)
c.
利用拼音映射到的汉字,转到第一条中的 纯汉字 搜索
d.
匹配发生在 名称,标签,地址 等
另外,
例子9,jiaoda
例子10,jiada
例子11,jiaod
上海站全部商户中,没有找到"jiaod"(0)
例子12,shangda
例子13,shangd
上海站全部商户中,没有找到"shangd"(0)
例子14,sangda
例子15,suguang
由上面的例子可以推测,
b3 和 b2 的描述可能是不正确的
(
例子9,11不符合 b3
最小编辑距离匹配,b2 可以使用 口音近似 进行解释
),应该加入了
口音
的考虑(对比 例子15 与前面的例子1,2,以及 例子3 的提示):
<1> 不同的口音,相同的拼音,存在不同的发音,考虑了同一个拼音,近似发音的匹配
<2> 不同的口音,不同的拼音,存在近似的发音,
但 模糊近似发音库 是不完善的,例如 “niu肉”和“liu肉”
后续有新发现,继续补充
3. 查询串为 汉字+拼音
例子16,属guang
例子25,素guang
例子17,属guan
例子18,shu光
例子19,shu广
例子20,shang大
例子21,shang大lei
例子22,shanglei大
上海站全部商户中,没有找到"shanglei大"(0)
例子23,上da
例子24,西jiaobailian
a.
首先不区分 拼音 汉字,进行 全文检索
,找到包含整个串的POI,不考虑 查找单元 的顺序
a1. 连续的拼音视为一个查找单元,单个汉子视为查找单元,参考例子20,21,22
a2. 查找不到包含所有 查找单元 的 POI系统,转到 b
b.
汉字映射为拼音,转为 第二条 纯拼音 搜索
,注意 例子17,25