ElasticSearch映射不起作用

Fel*_*lix 9 elasticsearch

我正在尝试使用不同的分析器为各个字段设置ElasticSearch索引.但是,我似乎找不到设置现场特定分析仪的方法; 这是我如何创建我的(测试)索引:

curl -XPOST localhost:9200/twitter
curl -XPUT 'http://localhost:9200/twitter/tweet/_mapping' -d '
{
    "tweet" : {
        "properties" : {
            "message" : {
                "type" : "string",
                "search_analyzer" : "snowball", 
                "index_analyzer" : "snowball"
            }
        }
    }
}'
Run Code Online (Sandbox Code Playgroud)

如果我正确阅读文档,那么这应该创建带有'tweet'类型的索引'twitter',并且应该通过snowball stemming analyzer分析'message'字段的内容.为了测试这个,我尝试了以下查询:

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "message" : "Look, a fighting War-Unicorn!"
}'
curl -XGET localhost:9200/twitter/_search?q=fight
Run Code Online (Sandbox Code Playgroud)

如果我没有弄错的话,那么这应该会受到打击,因为战斗是战斗的根源; 问题是,它没有,我得到零命中.看起来好像ElasticSearch完全忽略了映射(即使ElasticSearch接受了所有这些查询,因为我为每个查询得到'ok'.)

我已经尝试用雪球分析仪替换默认的分析仪,然后它可以工作; 事情是,我完全需要具有特定领域的分析仪,所以这对我没有帮助.我也尝试过不同的分析器,比如将"index"设置为"no",但无济于事.

我究竟做错了什么?

imo*_*tov 11

要使用特定于字段的分析器,您需要在查询中指定此字段.否则,使用默认分析器.尝试

curl -XGET 'localhost:9200/twitter/_search?q=message:fight'
Run Code Online (Sandbox Code Playgroud)

要么

curl -XGET 'localhost:9200/twitter/_search?df=message&q=looking'
Run Code Online (Sandbox Code Playgroud)

  • 当您的邮件被编入索引时,它会被索引为包含几个字段的文档:`{message:["look","fight","war","unicorn"],_ all:["look","a","战斗", "战争", "麒麟"] _类型: "鸣叫",...}`.如果未指定搜索字段,则查询将转换为`_all:fight`.请注意,因为字段`_all`是使用默认分析器进行分析的,所以它**不包含令牌`fight`,这就是为什么它不会出现在结果中.换句话说,使用两个不同的分析器(默认和雪球)将消息编入索引两次,并且您正在搜索默认分析器分析的版本. (5认同)