Elasticsearch 未分析字段
Elasticsearch not analyzed field
我有一个包含以下内容的分析字段:'quick brown foxes' 和另一个包含:'quick brown fox'.
我想找到那些明确包含 'foxes'(不是 fox)的文档。据我所知,我必须创建一个包含已分析和未分析子字段的多字段(请参阅下面的映射)。但是我该如何查询呢?
这是一个例子(请注意,我的分析器设置为匈牙利语,但我想这在这里无关紧要):
{
"settings" : {
"number_of_replicas": 0,
"number_of_shards": 1,
"analysis" : {
"analyzer" : {
"hu" : {
"tokenizer" : "standard",
"filter" : [ "lowercase", "hu_HU" ]
}
},
"filter" : {
"hu_HU" : {
"type" : "hunspell",
"locale" : "hu_HU",
"language" : "hu_HU"
}
}
}
},
"mappings": {
"foo": {
"_source": { "enabled": true },
"properties": {
"text": {
"type": "string",
"analyzer": "hu",
"store": false,
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"store": false
}
}
}
}
}
}
}
我尝试过的查询:匹配、术语、span_term、query_string。所有都在文本和 text.raw 字段上执行。
"index": "not_analyzed"
表示这个字段根本不会被分析(https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-index.html)。所以它甚至不会被拆分成单词。我相信这不是你想要的。
取而代之的是,您需要添加新的分析器,它只包括分词器 whitespace
(https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-tokenizer.html):
"analyzer" : {
"hu" : {
"tokenizer" : "standard",
"filter" : [ "lowercase", "hu_HU" ]
},
"no_filter":{
"tokenizer" : "whitespace"
}
}
那么您需要为您的领域使用这个新的分析器:
"raw": {
"type": "string",
"analyzer": "no_filter",
"store": false
}
我有一个包含以下内容的分析字段:'quick brown foxes' 和另一个包含:'quick brown fox'.
我想找到那些明确包含 'foxes'(不是 fox)的文档。据我所知,我必须创建一个包含已分析和未分析子字段的多字段(请参阅下面的映射)。但是我该如何查询呢?
这是一个例子(请注意,我的分析器设置为匈牙利语,但我想这在这里无关紧要):
{
"settings" : {
"number_of_replicas": 0,
"number_of_shards": 1,
"analysis" : {
"analyzer" : {
"hu" : {
"tokenizer" : "standard",
"filter" : [ "lowercase", "hu_HU" ]
}
},
"filter" : {
"hu_HU" : {
"type" : "hunspell",
"locale" : "hu_HU",
"language" : "hu_HU"
}
}
}
},
"mappings": {
"foo": {
"_source": { "enabled": true },
"properties": {
"text": {
"type": "string",
"analyzer": "hu",
"store": false,
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"store": false
}
}
}
}
}
}
}
我尝试过的查询:匹配、术语、span_term、query_string。所有都在文本和 text.raw 字段上执行。
"index": "not_analyzed"
表示这个字段根本不会被分析(https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-index.html)。所以它甚至不会被拆分成单词。我相信这不是你想要的。
取而代之的是,您需要添加新的分析器,它只包括分词器 whitespace
(https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-tokenizer.html):
"analyzer" : {
"hu" : {
"tokenizer" : "standard",
"filter" : [ "lowercase", "hu_HU" ]
},
"no_filter":{
"tokenizer" : "whitespace"
}
}
那么您需要为您的领域使用这个新的分析器:
"raw": {
"type": "string",
"analyzer": "no_filter",
"store": false
}