我正在使用Hibernate Search(使用Lucene)来搜索某些已在目录中编入索引的数据。它工作正常,但我需要做一个反向搜索。通过反向搜索,我的意思是我有一个存储在我的数据库中的查询列表,我需要在每次创建数据对象时检查这些查询中的哪一个与数据对象匹配。我需要它在数据对象与他创建的查询匹配时提醒用户。所以我需要索引这个刚刚创建的单个数据对象,并查看我的列表中哪些查询将此对象作为结果。在Hibernate搜索中进行反向搜索
我见过的Lucene MemoryIndex类在内存中创建一个索引,所以我可以在列表中的每个查询这样做例子(尽管在查询中的一个Java迭代名单不会是非常有效的):
//Iterating over my list<Query>
MemoryIndex index = new MemoryIndex();
//Add all fields
index.addField("myField", "myFieldData", analyzer);
...
QueryParser parser = new QueryParser("myField", analyzer);
float score = index.search(query);
if (score > 0.0f) {
System.out.println("it's a match");
} else {
System.out.println("no match found");
}
这里的问题是,这个数据类有几个Hibernate搜索注释@字段,@ IndexedEmbedded,...这表明字段应该如何索引,所以当我调用FullTextEntityManager实例上的index()方法时,它使用这些信息索引目录中的对象。有没有类似的方式来使用这些信息在内存中索引它?
有没有一个更有效的方法来做这种反向搜索?