我正在使用 Hibernate Search(它使用 Lucene)来搜索我在目录中编制索引的一些数据。它工作正常,但我需要进行反向搜索。通过反向搜索,我的意思是我的数据库中存储了一个查询列表,每次创建数据对象时,我需要检查其中哪些查询与数据对象匹配。当数据对象与他创建的查询匹配时,我需要它来提醒用户。所以我需要索引这个刚刚创建的单个数据对象,并查看我的列表中的哪些查询有这个对象作为结果。
我已经看到 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 Search Annotations @Field,@IndexedEmbedded,... 这表明应该如何索引字段,所以当我在 FullTextEntityManager 实例上调用 index() 方法时,它使用这个信息来索引对象在目录中。是否有类似的方法可以使用此信息在内存中对其进行索引?
有没有更有效的方法来进行这种反向搜索?