Grails可搜索插件(Lucene) - 1对多查询



我使用的是grail的searchable plugin(0.6.4)。我需要在隐私设置的基础上搜索成员。下面是db的设计。会员拥有MemberProfile, and MemberProfile has PrivacySettings

class Member extends {
        String firstName
        String lastName
    static searchable = {
        analyzer "simple"
        only = ['firstName', 'lastName']
        firstName boost: 5.0
        profile component: true
        profile reference: true
    }
    static hasOne = [profile: MemberProfile]
}
class MemberProfile {
    static searchable = {
        analyzer "simple"
        only = ['currentCity', 'currentCountry']
        privacySettings component: true
    }
        static hasMany = [privacySettings:PrivacySettings]
    String currentCity
    String currentCountry
    List<PrivacySettings> privacySettings
}
//For instance Privacy Settings contains 
//fieldSectionName: firstName , connectionLevel: true , memberLevel: false
// This means firstName will be shown to only members' friends(connection)
class PrivacySettings {
    static searchable = {
        analyzer "simple"
        only = ['fieldSectionName', 'connectionLevel', 'memberLevel']
    }
    String fieldSectionName
    boolean connectionLevel
    boolean memberLevel
}

一个成员配置文件对每个字段有许多隐私设置。

什么查询将只搜索那些在fieldsSectionName中有display_name和在隐私设置表中有connectionLevel为true的成员?

我正在尝试这样做

def query="mydisplayname"
def searchResults = Member.search(query + "*" + "  +(fieldSectionName:${'display_name'} AND connectionLevel:${true})", params)

我不知道grail,但在Lucene中,布尔查询的最大子句数默认为1024。

你可以增加这个限制。

这样做会有性能损失。或者你可以索引文档中的值并搜索它们(lucene将对具有相同名称的不同字段执行or操作)。

您可以使用BooleanQuery类的静态属性更改限制:

 BooleanQuery.MaxClauseCount = 99999;
暗利

我在我的grails应用程序中遇到了同样的问题,为了解决它,将org.apache.lucene.search.BooleanQuery.maxClauseCount = 99999添加到您的配置中。Groovy并重新启动应用程序

相关内容

  • 没有找到相关文章

最新更新