0

私はelasticsearch 6.2を使用しています.elasticsearch検索機能を最適化して、すべてのフィールド値を1つの値にコピーし、複数のフィールドではなく1つのフィールドのクエリ文字列で検索するよりも生成したいと考えています. どうやってするか?すべてのフィールドをコピーする方法は、どれを 1 つのフィールドにコピーするかです。

索引テンプレートの初期化

export const init = async types => {
    try {
        let client = createClient()

        const templateSettings = {
            index_patterns : ['*'],
            settings: indexTemplateSettings,
            mappings : types.reduce((p, type) => ({
                ...p,
                [type] : {
                    numeric_detection: true,
                    _source : {enabled : true},
                    'properties': {
                        'searchIndex': {
                            'type': 'text',
                        },
                        '*': {
                            'type': 'text',
                            'copy_to': 'searchIndex',
                        },
                    },
                },
            }), {}),
        }

        await client.indices.putTemplate({
            name: 'default',
            body: templateSettings,
        },(error, response) => {
            logger.silly('Pushing of index template completed', response)
        })
    } catch (e) {
        logger.error(e)
    }
}

索引をつける

export const push = (message, type) => new Promise(async resolve => {
    try {
        let client = createClient()
        let indexCreationTime = new Date('2016-02-08').toISOString().substring(0, 10)

        // '2016-02-08'
        console.log(message, 'message')
        console.log(type, 'type')

        await client.index({
            index: type.toLowerCase(),
            type,
            body: {
                ...message,
                _timestampIndex: indexCreationTime,
            },
        },
        (error, response) => {
            logger.silly('Pushing of data completed', response)

            resolve(response)
        })

    } catch (e) {
        logger.error(e)
    }
})
4

1 に答える 1