elasticsearch Elasticsearch可以';t使用空格分析器搜索点(.)前面的单词
我有以下索引设置
elasticsearch Elasticsearch可以';t使用空格分析器搜索点(.)前面的单词,
elasticsearch,
elasticsearch,我有以下索引设置 { "analysis": { "filter": { "dutch_stop": { "type": "stop", "stopwords": "_dutch_" }, "my_word_delimiter": {
{
"analysis": {
"filter": {
"dutch_stop": {
"type": "stop",
"stopwords": "_dutch_"
},
"my_word_delimiter": {
"type": "word_delimiter",
"preserve_original": "true"
}
},
"analyzer": {
"dutch_search": {
"filter": [
"lowercase",
"dutch_stop"
],
"char_filter": [
"special_char_filter"
],
"tokenizer": "whitespace"
},
"dutch_index": {
"filter": [
"lowercase",
"dutch_stop"
],
"char_filter": [
"special_char_filter"
],
"tokenizer": "whitespace"
}
},
"char_filter": {
"special_char_filter": {
"pattern": "/",
"type": "pattern_replace",
"replacement": " "
}
}
}}
映射
{
"properties": {
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer": "dutch_search",
"search_analyzer": "dutch_search"
}
}}
这是我插入的一份文件
{
"title": "This is test data."
}
现在我正在搜索“数据”这个词,我的查询是
{
"query": {
"multi_match": {
"query": "data",
"fields": [
"title"
]
}
}
但它没有返回任何记录。
我知道这是因为空白分析器,但我也需要它,所以任何人都可以提出任何解决方案。如何使用空白分析器并搜索点(.)前面的单词?您需要使用,可以删除
字符,这应该可以解决您的问题
以下是工作示例:
得到http://localhost:9200/_analyze
{
"tokenizer": "whitespace",
"char_filter": [
{
"type": "mapping",
"mappings": [
".=>"
]
}
],
"text": "This is test data."
}
返回以下标记
{
"tokens": [
{
"token": "This",
"start_offset": 0,
"end_offset": 4,
"type": "word",
"position": 0
},
{
"token": "is",
"start_offset": 5,
"end_offset": 7,
"type": "word",
"position": 1
},
{
"token": "test",
"start_offset": 8,
"end_offset": 12,
"type": "word",
"position": 2
},
{
"token": "data",
"start_offset": 13,
"end_offset": 18,
"type": "word",
"position": 3
}
]
}
或者,您可以根据需要修改当前图案替换字符过滤器
"char_filter": {
"my_char_filter": {
"type": "pattern_replace",
"pattern": "\\.", // note this
"replacement": ""
}
}
你们能解决这个问题吗?