aws cloudsearch / lucene查询街道名称

时间:2016-02-12 11:12:10

标签: elasticsearch lucene amazon-cloudsearch

我将地址数据集上传到AWS cloudsearch,并且需要能够灵活地查询街道名称:

数据集值: {街道:“Michael-Bayerhammer-Strasse”}

以下所有查询都应该匹配: 迈克尔Gundringer-大街 迈克尔Gundringerstr。 迈克尔Gundringer-STR。 迈克尔GundringerStr。 等

我找不到实现这个目标的方法。有没有办法用cloudsearch / lucene或任何其他工具来做到这一点?

您可以使用我的cloudsearch网址进行测试:

返回预期结果:

http://search-geocode-austria-irx6qepcnpnb2gp4lp5tz37tky.eu-west-1.cloudsearch.amazonaws.com/2013-01-01/search?q=Michael-Gundringer-Strasse

找不到任何匹配项:

http://search-geocode-austria-irx6qepcnpnb2gp4lp5tz37tky.eu-west-1.cloudsearch.amazonaws.com/2013-01-01/search?q=Michael-Gundringerstr

编辑: 好的,我想出了如何处理一些可能的查询: 替换 - 与空间和。与*

这会产生以下结果:

迈克尔Gundringer-大街 迈克尔Gundringer-STR。

但我仍在与Michael-Gundringerstr挣扎。有没有办法只需要从lucene部分匹配(即它与Gundringer的数据库条目匹配Gundringerstr的查询)?

2 个答案:

答案 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和标记化的详情,请参阅文档。

将Str和Strasse视为等效

您希望 strasse 匹配 str 。您可以通过配置自定义同义词列表来完成此操作。有关详情,请参阅docs。您也可以通过算法词干来完成此任务,其中CS内部将阻止 strasse 并将其存储为 str 。你可以打开完整的算法词干并测试它(德语的默认值是轻量词)。