ElasticSearch无法从单词中搜索特殊字符

时间:2018-06-23 07:58:23

标签: java elasticsearch kibana elastic-stack

我已使用摄取附件处理器插件在弹性搜索中为pdf文件编制了索引,现在我根据PDF中的可用内容搜索文件。

例如,我的pdf中有一些类似的内容。

Hello I m Karthikeyan. My mail id Karthikeyan@gmail.com, My mob no 4573894833.

在使用Java API进行搜索时,能够像以下进行搜索。

搜索

Karthikeyan@gmail.com可以获取文件。 但, 如果我搜寻, @gm表示无法获取该文件,希望我应该获取该文件,因为该文件具有我的搜索关键字@gm

我该怎么做。 ?

我使用的令牌生成器分别为min_grammax_gram 3个。

请找到我使用过的以下Java API,但没有一个能给我预期的结果。

QueryStringQueryBuilder attachmentQB = new QueryStringQueryBuilder("@gm"); 

请找到我下面的映射详细信息。

PUT attach_local
    {

  "settings": {
    "analysis": {
      "analyzer": {
        "custom_analyzer": {
          "type": "custom",
          "tokenizer": "my_tokenizer",
          "char_filter": [
            "html_strip"
          ],
          "filter": [
            "lowercase",
            "asciifolding"
          ]
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "ngram",
          "min_gram": 3,
          "max_gram": 3,
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "attachment": {
          "properties": {
            "content": {
              "type": "text",
              "analyzer": "custom_analyzer"
            },
            "content_length": {
              "type": "long"
            },
            "content_type": {
              "type": "text"
            },
            "language": {
              "type": "text"
            }
          }
        },
        "resume": {
          "type": "text"
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您可以看到ES如何使用

标记您的搜索文本
POST /attach_local/_analyze
{
  "analyzer": "custom_analyzer",
   "text": "@gm"
}

这将告诉您是否删除@字符。如果是这样的话,那将可以解释这种现象,因为您的倒排索引具有所有三字母组合,并且您正在搜索一个二元组。