【问题标题】:How to delete data from Lucene's index exactly by document id?如何通过文档 id 从 Lucene 的索引中删除数据?
【发布时间】:2015-04-11 13:16:24
【问题描述】:

我在 MongoDb 中有一组文档(url:String,title:String,content:String)。 url 是一个唯一字段,包含类似 server://aaa/bbb/1.html 的内容。

我想用 Lucene 索引数据,而不是 Mongo(我可以更改存储)。我要将 url 存储在 Lucene 的索引中。当用户通过关键字搜索某些内容时,我将使用 Lucene 执行查询,读取 url 字段并转到 Mongo 通过 url 提取 doc。效果很好。

但是我不能通过 url 从 Lucene 的索引中删除数据,因为它包含很多不允许的符号。我对 url 字段使用以下设置:

store = true
analyzed = false
indexed = true 

(我应该索引这个字段吗?如果我不索引这个字段怎么办?Lucene 会做全扫描吗?集合可以包含数百万个文档)

如果我想获得良好的性能,我应该创建二级索引(Int 或 Long)而不是通过 url 搜索吗?

我使用最新版本的 JVM、Lucene、Ubuntu 和 Mongo。

【问题讨论】:

  • 你说的很多不允许的符号是什么意思?你可以在 Lucene 中使用特殊的分析器来保持 URL 字段不变,或者没有大的变化
  • 另外,显示一些代码,当您尝试删除文档但它不起作用时
  • 我在 Lucene 周围使用 clojure 和 github.com/weavejester/clucy 包装器。不过没关系,我可以围绕IndexWriter编写自己的实现。我对如何在 java 中做到这一点很感兴趣,然后我在 clojure 中实现它。主要问题是我应该分析和索引 url 字段吗?从索引中删除文档是正确的方法吗?
  • 问题是我可以执行查询“some.url”但不能执行“some.url” - 尾随字符会带来异常。我想默认解析器的 url 有问题。
  • 什么样的异常?你可以逃避这些字符

标签: lucene


【解决方案1】:

您需要在查询中正确编码您的 URL,它应该会有所帮助。

例如在您的情况下,some.url/foo 应该作为 some.url%2Ffoo 在查询中传递。你可以在这里尝试在线解码/编码 - http://www.url-encode-decode.com/

有关在 Solr 查询中转义字符的更多信息,请查看此处 - https://wiki.apache.org/solr/SolrQuerySyntax#NOTE:_URL_Escaping_Special_Characters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多