默认情况下,如何映射到not_analyze所有索引和类型的某些字段

时间:2017-02-18 11:29:27

标签: java elasticsearch

我理解如何为任何索引和类型构建映射。但是,我想要一个字段my_field_2PUT /address_index { "mappings":{ "address":{ "properties":{ "state":{ "type":"string", "fields":{ "raw":{ "type":"string", "index":"not_analyzed" } } } } } } } ,不会分析将来会创建的所有索引和类型

<html>
<head>
<script>
/* Event fired on the drag target */
function dragStart(event) {
  event.dataTransfer.setData("Text", event.target.id);   
}

/* Events fired on the drop target */
function allowDrop(event) {
  event.preventDefault();
}

function drop(event) {
  event.preventDefault();
  var data = event.dataTransfer.getData("Text");
  event.target.appendChild(document.getElementById(data));
  document.getElementById("submit").submit();
}
</script>
</head>
<body>
<form action="page1.php" method="post" id="submit"></form>

<ul class="link">                       
     <li ondragstart="dragStart(event)" draggable="true" id="dragtarget">500/</li>
</ul>

<div class="rect2" ondrop="drop(event)" ondragover="allowDrop(event)">
     <span class="amnt"> value here </span>
</div>

</body>
</html>

我还在其中一个链接中看到了如何为所有strings做的事情。但是,我无法仅为上述字段添加它。

我将在Java中实现它。然而,只有DSL JSON才是不错的开端。

1 个答案:

答案 0 :(得分:0)

您可以通过创建一个模式为“*”的index template来实现此目的,这意味着它将适用于您将来创建的所有索引,并在那里定义此映射。

80

现在您可以使用任何名称创建索引,此映射将适用于该索引。

PUT 127.0.0.1:9200/_template/stacktest
{
    "template": "*",
    "settings": {
        "number_of_shards": 1
    },
    "mappings": {
        "address": {
            "properties": {
                "state": {
                    "type": "string",
                    "fields": {
                        "raw": {
                            "type": "string",
                            "index": "not_analyzed"
                        }
                    }
                }
            }
        }
    }
}
PUT 127.0.0.1:9200/testindex/

请注意, index:not_analyzed 部分已转换为关键字数据类型,因为字符串已被弃用。如果您使用的是5.x版,则应使用textkeyword

编辑以解决您的评论

要使其适应您提到的特定两个字段,以下请求将创建模板:

GET 127.0.0.1:9200/testindex/_mapping

{
    "testindex": {
        "mappings": {
            "address": {
                "properties": {
                    "state": {
                        "type": "text",
                        "fields": {
                            "raw": {
                                "type": "keyword"
                            }
                        }
                    }
                }
            }
        }
    }
}

如果您现在将文档索引到新索引中,那么对于任何类型的文档将不会分析这两个字段,将分析任何其他字符串字段,这是我理解您的原始文档的方式问题

{
    "template": "*",
    "settings": {
        "number_of_shards": 1
    },
    "mappings": {
        "_default_": {
            "properties": {
                "my_field_1": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "my_field_2": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}

现在检查映射并注意区别:

PUT 127.0.0.1:9200/testindex/address
{
    "my_field_1": "this is not_analyzed",
    "my_field_2": "this is not_analyzed either",
    "other_field": "this however is analyzed"
}

PUT 127.0.0.1:9200/testindex/differenttype
{
    "my_field_1": "this is not_analyzed",
    "my_field_2": "this is not_analyzed either",
    "other_field": "this however is analyzed"
}