elasticsearch Elasticsearch可以';t使用空格分析器搜索点(.)前面的单词,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch可以';t使用空格分析器搜索点(.)前面的单词,elasticsearch,elasticsearch" />

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": ""
        }
      }

你们能解决这个问题吗?