Я использую Hibernate Search (который использует Lucene) для поиска некоторых данных, которые я проиндексировал в каталоге. Это работает нормально, но мне нужно сделать обратный поиск. Под обратным поиском я подразумеваю, что у меня есть список запросов, хранящихся в моей базе данных, и мне нужно проверять, какой из этих запросов соответствует объекту данных каждый раз при создании объекта данных. Мне нужно, чтобы предупредить пользователя, когда объект данных совпадает с созданным им запросом. Поэтому мне нужно проиндексировать этот единственный объект данных, который только что был создан, и посмотреть, какие запросы в моем списке содержат этот объект.
Я видел, как Lucene MemoryIndex Class создает индекс в памяти, поэтому я могу сделать что-то вроде этого примера для каждого запроса в списке (хотя итерация в списке запросов 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 @ Field, @ IndexedEmbedded, ... которые указывают, как поля должны индексироваться, поэтому, когда я вызываю метод index () для экземпляра FullTextEntityManager, он использует эту информацию для индексировать объект в каталоге. Есть ли подобный способ индексировать его в памяти, используя эту информацию?
Есть ли более эффективный способ обратного поиска?