Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MySQL全文(或sphinx?)进行模糊街道地址搜索_Mysql_Search_Sphinx_Full Text Search - Fatal编程技术网

使用MySQL全文(或sphinx?)进行模糊街道地址搜索

使用MySQL全文(或sphinx?)进行模糊街道地址搜索,mysql,search,sphinx,full-text-search,Mysql,Search,Sphinx,Full Text Search,我有一个数据库表,里面有来自谷歌地图地理代码响应的地址。谷歌缩写了所有方向(西->西,东->东,等等) 因此,如果我输入一个地址,如“100 West Pender Street”,那么谷歌地图返回的格式化地址是“100 W Pender St”,我将其插入我的表中 现在,如果用户出现并搜索该地址,则以下所有内容都应匹配: 彭德街 西彭德街 100吊坠 100瓦吊坠 100西彭德酒店 他们或多或少都是这样。但是,表中的“w”将被忽略,因为它低于最小字长。位于east penner上的地址在搜索结

我有一个数据库表,里面有来自谷歌地图地理代码响应的地址。谷歌缩写了所有方向(西->西,东->东,等等)

因此,如果我输入一个地址,如“100 West Pender Street”,那么谷歌地图返回的格式化地址是“100 W Pender St”,我将其插入我的表中

现在,如果用户出现并搜索该地址,则以下所有内容都应匹配:

彭德街 西彭德街 100吊坠 100瓦吊坠 100西彭德酒店

他们或多或少都是这样。但是,表中的“w”将被忽略,因为它低于最小字长。位于east penner上的地址在搜索结果中的权重相等(“E”也被忽略)

最好的处理方法是什么

我怀疑将最小字长设置为1是一件“坏事”

我可以搜索并替换谷歌地址中的已知缩写(N、E、S、W、St、Ave、Dr等),然后用它们的扩展名替换它们——但有些街道名称无效(有些城市有单字母街道名称:J street等)

此外,像“123 160 St”这样的地址根本无法搜索,因为街道号码(123)和街道名称(160)都低于最小字长

MySQL全文版是正确的方法吗? 斯芬克斯能提供更好的东西吗


还是我还没有考虑过其他解决方案?请记住,用户的搜索查询将不仅与属性的地址匹配,还与其他文本列(如属性名称和描述)匹配。

您可以使用
ft\u min\u word\u length
减少mysql的全文最小字长,但将其降低到2或1将增加“噪波”结果的数量。另外,要注意缩写。在我的城市里有一个“西新月”,因为这是一个人的名字,而不是一个方向。为什么不创建一个方向为(N,E,W,s)的新字段,然后用field='s'搜索,或者如果多个搜索在('s','N')Marc中使用­field-我担心噪音,特别是如果我必须将其设置为1才能捕获N,E,s,W.David-从地理编码器返回的地址没有作为单独字段的方向,因此我必须将其从全文字段中解析出来,这对于实际命名为“N”或“E”等的街道可能会有问题。