java - Lucene:多线程文档复制

标签 java multithreading lucene indexing duplicates

我有多个线程在 lucene 索引中执行搜索。每次搜索之前,都会检查内容是否已编入索引,如果没有,则将其添加到索引中。如果同时对未索引的内容进行两次并行搜索,则会出现重复的文档,并且猜测搜索结果会变得困惑。

我找到了以下方法:IndexWriter.updateDocument

但我认为这并不能解决我面临的多线程问题。

如有任何解决此问题的建议,我们将不胜感激。

最佳答案

首先确保一次只有一个方法(IndexWriter#updateDocument())调用,您可以使用属于您线程的共享对象来实现它,就像这样

class Search implements Runnable{
private Object lock=new Object();
private volatile boolean found=false;
    public void run(){
      //business
      if(<<found something!>> && !found){
        synchronized(lock){/*call the related-method*/found=true;}
      }
      //business
      }
}

其次,您需要跟踪搜索过程中找到的每个键以避免重复,可以检查键或使用简单的 boolean 检查。

并且请通过向其他线程发出有关中止搜索过程的信号来提防无用的过程,如果您只需要第一个创建的 key ,这取决于业务。

关于java - Lucene:多线程文档复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19187976/

相关文章:

java - Applet 在 Opera 中不接收鼠标移动事件

Java Swing : components not added to JPanel with JScrollPane

java - 以编程方式发现本地网络设备和 IO

C#:在并行线程中设置 HttpContext.Current 有什么问题吗?

java - Java中的并发随机数生成

indexing - 是否可以在 lucene 中使用负查询提升?

lucene - 使用 Examine 和 Lucene.Net 查询以逗号分隔的 ID 列表?

java - 重复 Android 抬头通知

mysql - SOLR DIH 在同一个 MySql 表上添加具有多个查询的文档

java - 如何在hibernate中查找外键的id