9

我正在尝试为各个字段设置具有不同分析器的 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"
            }
        }
    }
}'

如果我正确阅读了文档,那么这应该创建类型为“tweet”的索引“twitter”,并且应该通过雪球词干分析器分析“消息”字段的内容。为了测试这一点,我尝试了以下查询:

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

如果我没记错的话,那么这应该会返回一个命中,因为战斗是战斗的主干;问题是,事实并非如此,我的命中率为零。似乎 ElasticSearch 完全忽略了映射(即使 ElasticSearch 接受所有这些查询,因为我对它们中的每一个都表示“ok”。)

我已经尝试用雪球分析器替换默认分析器,然后它就可以工作了;问题是,我完全需要特定领域的分析器,所以这对我没有帮助。我还尝试了不同的分析器以及将“index”设置为“no”之类的东西,但无济于事。

我究竟做错了什么?

4

2 回答 2

11

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

curl -XGET 'localhost:9200/twitter/_search?q=message:fight'

或者

curl -XGET 'localhost:9200/twitter/_search?df=message&q=looking'
于 2011-06-03T16:58:08.333 回答
0

我建议您使用https://github.com/lmenezes/elasticsearch-kopf可以测试所有分析器并从另一个索引复制 mapp 并监控您的索引... http://www.elasticsearch.org/guide/en/elasticsearch /client/community/current/health.html

于 2014-12-29T11:20:00.113 回答