2015-05-25 32 views
1

(我做这与Elasticsearch 1.5.2的新副本)copy_to和不工作

我定义自定义分析仪,它的工作的自定义分析:

curl -XPUT 127.0.0.1:9200/test -d '{ 
    "settings": { 
     "index": { 
     "analysis": { 
      "tokenizer": { 
      "UrlTokenizer": { 
       "type": "pattern", 
       "pattern": "https?://([^/]+)", 
       "group": 1 
      } 
      }, 
      "analyzer": { 
      "accesslogs": { 
       "tokenizer": "UrlTokenizer" 
      } 
      } 
     } 
    } 
    } 
}'; echo 

curl '127.0.0.1:9200/test/_analyze?analyzer=accesslogs&text=http://192.168.1.1/123?a=2#1111' | json_pp 

现在我申请它到一个索引:

curl -XPUT 127.0.0.1:9200/test/accesslogs/_mapping -d '{ 
    "accesslogs" : { 
    "properties" : { 
     "referer" : { "type" : "string", "copy_to" : "referer_domain" }, 
     "referer_domain": { 
     "type":  "string", 
     "analyzer": "accesslogs" 
     } 
    } 
    } 
}'; echo 

从映射我可以看到他们都应用。

现在我尝试插入一些数据,

curl 127.0.0.1:9200/test/accesslogs/ -d '{ 
    "referer": "http://192.168.1.1/aaa.php", 
    "response": 100 
}';echo 

而且copy_to场,又名referer_domain没有产生,如果我尝试添加一个字段使用该名称,标记生成器也不会被应用。

任何想法?

+0

您可以向我们展示ES日志中是否有任何相关内容? – Val

回答

7

copy_to工作,但是,你假设,因为你看不到该字段正在生成,它不存在。

当您返回文档时(例如GET /test/accesslogs/1),您看不到_source下的字段。这包含已编入索引的原始文档。而且您没有索引任何referer_domain字段,只是refererresponse。这就是你看不到它的原因。

但Elasticsearch 确实在倒排索引中创建该字段。如果您存储它,您可以使用它来查询,计算或检索。

让我举例说明我的发言:

  • 可以查询该字段,你会在此基础上得到返回结果。如果你真的想看看已被存储在倒排索引,你可以这样做:
GET /test/accesslogs/_search 
{ 
    "fielddata_fields": ["referer","response","referer_domain"] 
} 
  • 你可以,也,检索字段,如果你存储它:
"referer_domain": { 
    "type": "string", 
    "analyzer": "accesslogs", 
    "store" : true 
    } 

与此:

GET /test/accesslogs/_search 
{ 
    "fields": ["referer","response","referer_domain"] 
} 

总之,copy_to修改索引文件,而不是文档。您可以查询具有该字段的文档,因为该查询会查看倒排索引,所以它将起作用。如果你想检索那个领域你需要存储它,以及。但是您不会在_source字段中看到该字段,因为_source是已编制索引的初始文档。并且初始文档不包含referer_domain

+0

谢谢安德烈!我成功检索了referer_domain字段,但它与referer字段相同,UrlTokenizer的结果不存在,我是否错过了某些内容? – daisy

+0

是的,看到'分析器'在看'fielddata_fields'输出。那是什么进入倒排指数和什么是分析的结果。 –

+0

是的,它的工作原理!是否有可能将结果放入_source字段? – daisy