创建Lucene索引以实现地址自动完成功能

时间:2018-09-03 07:31:56

标签: autocomplete lucene cassandra-3.0

我正在尝试使用Stratio’s Cassandra Lucene Index为地址创建自动填充功能,但到目前为止,我只能获得与街道名称匹配的结果。

详细说明:

在我的表中,我(可能是错误地)创建了一个 fullAddress 文本字段(即,其值是其他字段(例如 streetName > houseNumber 邮政编码等)。

然后我按如下方式创建索引:

CREATE CUSTOM INDEX address_lucene_index ON address.address ()
USING 'com.stratio.cassandra.lucene.Index'
WITH OPTIONS = {
   'refresh_seconds': '1',
   'schema': '{
      fields: {
         fulladdress: {type: "text"}
      }
   }'
};

然后我发出以下查询:

SELECT * FROM address.address WHERE expr(address_lucene_index, {query: {type: "fuzzy", field: "fulladdress", value: "<SEARCH_STRING>"}})

其行为如下:

  • 如果SEARCH_STRING =数据库中存在的一些街道名称字母,我会得到许多相关结果。很好。
  • 如果SEARCH_STRING =街道名称+门牌号(fx:“ Mainroad 3”),即使数据库包含和地址类似“ Mainroad 3,3rd floor”,我也没有任何结果。以某种方式编写更精确的街道地址将导致不匹配。

我对Lucene和Cassandra都是陌生的。我目前对在线支持的搜索针对的是Lucene分析器和令牌生成器之类的搜索词。但是我可以在总体方向上有所帮助。也许我不应该使用这个综合的 fullAddress 字段,而是在各个地址组件字段上创建索引?

编辑:以上方法实际上部分起作用,因为当输入街道名称+门牌号时,它确实也会返回一些匹配项。但是,解决方案仍然不牢固。 Fx输入整个地址不会返回任何匹配项。

0 个答案:

没有答案