0

我正在使用圣杯的searchable plugin(0.6.4). 我需要根据隐私设置搜索会员。以下是数据库设计。会员有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 和 connectionLevel 中具有 display_name 的成员的查询将是什么。

我正在尝试这样的事情

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

2 回答 2

0

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

您可以增加此限制。

但是,会有性能损失。或者您可以索引文档上的值并搜索它们(lucene 将对具有相同名称的不同字段执行 OR 操作)。

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

 BooleanQuery.MaxClauseCount = 99999;

暗里

于 2013-03-12T12:12:25.780 回答
0

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

于 2013-07-31T14:15:58.100 回答