默认情况下,Elasticsearch 将“标记化”字符串字段。
这意味着您的消息字段被视为多个术语字段。对于 JSON1 :["welcome", "to", "elastic", "search"]
和 JSON2 : ["Hellow", "world"]
。
当您进行查询时,ElasticSearch 将尝试匹配术语,这就是为什么您会得到 JSON1 用于“欢迎”术语而 JSON2 用于“世界”术语。
如果您希望您的消息字段是“未标记的”(视为单个字符串),您必须明确将此字段的映射设置为keyword
. 这是通过使用 Mapping API 完成的。
你可以看看:
如果您需要一个keyword
分析器但不区分大小写,则需要定义一个带有lowercase
过滤器的自定义分析器(您可能需要为此删除并重新创建索引)。前任 :
$ curl -XPUT 'localhost:9200/test/_settings' -d '
{
"index": {
"analysis" : {
"analyzer" : {
"lowercaseAnalyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": ["lowercase"]
}
}
}
}
}
然后你用这个自定义分析器定义你的映射,而不是keyword
:
"message" : {"type" : "string", "analyzer" : "lowercaseAnalyzer"}
您还可以使用分析 API 测试您的分析器。前任 :
$ curl -XGET 'localhost:9200/test/_analyze?analyzer=lowercaseAnalyzer&pretty=true' -d 'Hello world'
{
"tokens" : [ {
"token" : "hello world",
"start_offset" : 0,
"end_offset" : 11,
"type" : "word",
"position" : 1
} ]
}
您可以在分析文档中查看所有可用的标记器和过滤器:http ://www.elasticsearch.org/guide/reference/index-modules/analysis/