Elasticsearch索引非索引属性的子属性

时间:2017-01-26 09:52:19

标签: elasticsearch

我在elasticsearch中有以下映射:

{
  "doc": {
    "properties": {
      "fileContent": {
        "properties": {
          "dimension": {
            "properties": {
              "jurisdiction": {
                "type": "string"
              },
              "language": {
                "type": "string"
              },
              "region": {
                "type": "string"
              },
              "trueValue": {
                "type": "string"
              }
            }
          },
          "dynamicGeneratedProperty1": {},
          "dynamicGeneratedProperty2": {},
          "dynamicGeneratedPropertyN": {}
        }
      }
    }
  }
}

我正在尝试配置elasticsearch以仅从 fileContent 中索引属性,但动态生成的其他属性,我不想被索引。

我已尝试过以下配置,但似乎无法正常运行:

curl -XPUT 0:9200/river1/doc/_mapping -d '
    {
      "doc": {
        "properties": {
          "fileContent": {
            "type": "object",
            "store": true,
            "enabled": false,
            "properties": {
              "dimension": {
                "type": "object",
                "store": true,
                "enabled": true
              }
            }
          }
        }
      }
    }
'

它从父属性应用“enabled”:false 配置,即 fileContent ,它忽略了子属性配置,它告诉索引< EM>尺寸

我知道还有一些模板配置,您可以根据定义的模板告诉弹性索引属性,您可以在其中指定某种正则表达式:https://www.elastic.co/guide/en/elasticsearch/reference/0.90/indices-templates.html。但我不知道如何正确使用它。

我正在使用相当旧版本的elasticsearch,0.93。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的答案。解决方案是对 fileContent 对象使用动态属性设置为 false 。以下是它的文档:https://www.elastic.co/guide/en/elasticsearch/reference/0.90/mapping-dynamic-mapping.html

因此,最终配置应如下所示:

<ul>
    <li>change_password</li>
    <li>update_profile</li>
</ul>
<h3> The result </h3>
<div id="theContent"></div>

<script type="text/javascript">
var listClick$ = Rx.Observable.create(function(observer){

            $('li').click(function(){

                let pageName = $(this).html();    
                observer.next(pageName);

            });

        }).startWith('change_password').flatMap(function(pageName){

            return Rx.Observable.fromPromise($.getJSON('http://localhost:3000/settings/'+pageName));        
        });
listClick$.subscribe(function(gottenJson){

$('#theContent').html(gottenJson.page);
}); 
</script>

这不允许elasticsearch在 fileContent 对象中索引和添加任何其他属性,而维度属性也可以动态填充和索引。< / p>