gpt4 book ai didi

java - 在 Hibernate Search 中反向搜索

转载 作者:行者123 更新时间:2023-11-30 07:37:27 24 4
gpt4 key购买 nike

我正在使用 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() 方法时,它使用这个信息来索引目录中的对象。是否有类似的方法使用此信息在内存中对其进行索引?

是否有更有效的反向搜索方法?

最佳答案

只需为新对象建立索引(如果使用自动索引,除了提交当前事务外无需执行任何操作),然后检索要运行的查询并在 boolean 查询中运行所有这些查询,结合存储的使用新对象的 ID 进行查询。像这样:

...
BooleanQuery query = new BooleanQuery();
query.add(storedQuery, BooleanClause.Occur.MUST);
query.add(new TermQuery(ProjectionConstants.ID, id), BooleanClause.Occur.MUST);
...

如果您得到结果,您就知道查询匹配。

关于java - 在 Hibernate Search 中反向搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2651646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com