我将地址数据集上传到AWS cloudsearch,并且需要能够灵活地查询街道名称:
数据集值: {街道:“Michael-Bayerhammer-Strasse”}
以下所有查询都应该匹配: 迈克尔Gundringer-大街 迈克尔Gundringerstr。 迈克尔Gundringer-STR。 迈克尔GundringerStr。 等
我找不到实现这个目标的方法。有没有办法用cloudsearch / lucene或任何其他工具来做到这一点?
您可以使用我的cloudsearch网址进行测试:
返回预期结果:
找不到任何匹配项:
编辑: 好的,我想出了如何处理一些可能的查询: 替换 - 与空间和。与*
这会产生以下结果:
迈克尔Gundringer-大街 迈克尔Gundringer-STR。
但我仍在与Michael-Gundringerstr挣扎。有没有办法只需要从lucene部分匹配(即它与Gundringer的数据库条目匹配Gundringerstr的查询)?
答案 0 :(得分:0)
如果street
字段为analysed
,您可以使用query_string
GET /index1/type1/_search
{
"query": {
"query_string": {
"default_field": "street",
"query": "Michael-Bayerhammer Str"
}
}
}
答案 1 :(得分:0)
我看到要解决两个问题:
您需要将地址分解为正确的令牌,并且您需要处理几种不同的格式。
Dash-delimited: CloudSearch会对标点符号进行标记,因此像Michael-Gundringer-Str这样的内容会被分解为“ Michael ” Gundringer '和' Str '。没问题。
大小写分隔:CS不会对基于驼峰的字符串进行标记,因此您需要自己分解 GundringerStr (足够简单的正则表达式)。
Undelimited:你有 Gundringerstr - 除了编写一些硬编码规则之外,我认为没有办法对此进行标记,这可能是可行的,具体取决于数据。
有关text processing和标记化的详情,请参阅文档。
您希望 strasse 匹配 str 。您可以通过配置自定义同义词列表来完成此操作。有关详情,请参阅docs。您也可以通过算法词干来完成此任务,其中CS内部将阻止 strasse 并将其存储为 str 。你可以打开完整的算法词干并测试它(德语的默认值是轻量词)。