gpt4 book ai didi

grails 可搜索插件查询

转载 作者:行者123 更新时间:2023-12-04 14:04:38 25 4
gpt4 key购买 nike

我的 Grails 应用程序正在使用可搜索插件,该插件基于 Compass 和 Lucene 提供搜索功能。我有两个可搜索的类,比如 Author 和 Book。我已将这些类映射到搜索索引,以便只能搜索某些字段。

要在两个类中执行搜索,我只需调用

def results = searchableService.search(query)

同时在两个类中进行搜索的好处之一是 results对象包括有关包含的结果数量、可用结果数量、分页详细信息等的元数据。

我最近添加了一个 bool 值 approved标记到 Book 类,我从不希望未批准的书籍出现在搜索结果中。一种选择是将上面的调用替换为:
def bookResults = Book.search(query + " approved:1")
def authorResults = Author.search(query)

但是,我现在需要弄清楚如何组合两个结果的元数据,这可能很棘手(尤其是分页)。

有没有办法通过单个查询在 Book 和 Author 之间进行搜索,但只返回已批准的书籍?

最佳答案

您是希望能够找到作者还是希望找到特定作者的书籍?

如果要查找具有给定作者的书籍,可以按以下方式配置域类:

class Author {
String name
...

static searchable = {
root false
}
}

这将导致从 searchableService.search(query) 中排除作者-result,你会发现字段名称,如 $/Book/Author/name在您的索引中。 (使用 luke 检查您的索引: http://code.google.com/p/luke/ )。

您可以通过配置更好的 prefix 来更改这些字段的名称。在你的书类中:
class Book {
String name
Author author
...

static searchable = {
author component: [prefix: 'author']
}
}

这会将索引中字段的名称更改为 bookauthor .

如果您现在使用 searchableService.search(query) 进行搜索,您将找到书名或作者姓名中包含搜索词的所有书籍。您甚至可以使用 authorname:xyz 将搜索限制为给定的作者。句法。

如果您真的想混合搜索结果,我只知道您已经提到的解决方案:将两个结果与您自己的代码混合,但我想很难以一种好的方式混合命中的得分。

更新您的回复:这是我的分页代码...

.gsp:
<div class="pagination">
<g:paginate total="${resultsTotal}" params="[q: params.q]"/>
</div>

Controller :
result = searchableService.search(params.q, params)
[
resultList: result.results,
resultsTotal: result.total
]

因此,如果您只是合并两次搜索的结果并添加 result.total s,这对你有用。

关于grails 可搜索插件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8802171/

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