【问题标题】:Add copy to to eslaticsearch on index template将副本添加到索引模板上的 eslaticsearch
【发布时间】:2018-09-20 00:26:43
【问题描述】:

我使用elasticsearch 6.2,我想优化elasticsearch搜索功能,将所有字段值复制到一个值并生成,而不是在一个字段而不是多个字段上搜索查询字符串。怎么做?如何复制所有字段,现在重要的是哪个字段。

初始化索引模板

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)
    }
})

【问题讨论】:

    标签: javascript node.js elasticsearch elasticsearch-5 elasticsearch-6


    【解决方案1】:

    最好的方法是创建一个利用dynamic template 的索引模板,该模板将捕获所有字段并将copy_to 参数添加到它们的定义中。

    PUT _template/my-template
    {
      "index_patterns": ["*"],
      "settings": {},
      "mappings": {
        "_doc": {
          "dynamic_templates": [
            {
              "all": {
                "match": "*",
                "mapping": {
                  "type": "text",
                  "copy_to": "searchIndex"
                }
              }
            }
          ],
          "properties": {
            "searchIndex": {
              "type": "text"
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-24
      相关资源
      最近更新 更多