有没有办法创建索引并使用Java API指定自定义分析器?它支持在创建索引时添加映射,但是如果不通过HTTP PUT发送JSON,我找不到这样的方法:
curl -XPUT localhost:9200/twitter?pretty=true -d '{
"analysis": {
"analyzer": {
"steak" : {
"type" : "custom",
"tokenizer" : "standard",
"filter" : ["snowball", "standard", "lowercase"]
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
我可以使用JSONBuilder构建这样的查询,但我找不到API在哪里运行它,CreateIndexRequest
没有我可以使用的任何东西,也没有client.admin().indices()
,据我所知.这样做的正确方法是什么?
我正在尝试使用不同的分析器为各个字段设置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",但无济于事.
我究竟做错了什么?