Плагин Grails для поиска (Lucene) - запрос 1 ко многим

Я использую Грааль 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
}

Один профиль участника имеет множество настроек конфиденциальности для каждого поля.

Какой будет запрос для поиска только тех членов, которые имеют display_name в fieldsSectionName и connectionLevel true в таблице настроек конфиденциальности.

Я пытаюсь что-то вроде этого

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

2 ответа

Я не знаю, Грааль, но в Lucene максимальное количество предложений в логическом запросе по умолчанию 1024.

Вы можете увеличить этот лимит.

Там будет снижение производительности, хотя. или вы можете индексировать значения в документе и искать их (lucene выполнит операцию ИЛИ в разных полях с одинаковыми именами).

Вы можете изменить ограничение, используя статическое свойство класса BooleanQuery:

 BooleanQuery.MaxClauseCount = 99999;

Омри

У меня была такая же проблема в моем приложении Grails, чтобы решить ее, добавьте org.apache.lucene.search.BooleanQuery.maxClauseCount = 99999 в ваш config.groovy и перезапустите ваше приложение

Другие вопросы по тегам