Elasticsearch:用于通过某些特殊字符搜索文档的分析器

时间:2017-05-03 15:34:21

标签: elasticsearch lucene

我希望能够使用一些特殊字符和术语在Elasticsearch上搜索某些文档。例如,如果我有以下文件:

"HEY YOU! Thanks for reading this post!"

我希望能够使用查询字符串,如:

{
 "query": {
    "query_string": {
        "default_field": "content",
        "query": "\"!\""
    }
 }
}

以前一份文件为结果。但我也想通过查询来获取文档:

{
 "query": {
    "query_string": {
        "default_field": "content",
        "query": "hey AND you"
    }
 }
}

我目前正在使用标准广告代码,但我无法查询特殊字符,它不会返回任何文档。 是否已为此类任务定义了一个tokenizer?我认为不分析该领域,但我不会有小写部分。

修改

我创建了一个自定义分析器:

{
  "sw3": {
    "settings": {
      "index": {
        "number_of_shards": "5",
        "provided_name": "sw3",
        "creation_date": "1493907201172",
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "filter": [
                "lowercase"
              ],
              "type": "custom",
              "tokenizer": "whitespace"
            }
          }
        },
        "number_of_replicas": "1",
        "uuid": "e0_9cIFrQWqn-zqYeg0q5g",
        "version": {
          "created": "5030299"
        }
      }
    }
  }
}

但是当我尝试时:

{
 "query": {
    "query_string": {
        "default_field": "content",
        "query": ";"
    }
 }
}

我没有得到任何结果。所以我试着这样做:

{
 "query": {
    "match": {
        "content": ";"
    }
 }
}

但我仍然没有任何结果。我试着看看tokeniser到底做了什么:

GET /my_index/_analyze?analyzer=my_analyzer
{
    "text": "Hey ; what's up"
}

查询的结果是:

{
  "tokens": [
    {
      "token": "hey",
      "start_offset": 0,
      "end_offset": 3,
      "type": "word",
      "position": 0
    },
    {
      "token": ";",
      "start_offset": 4,
      "end_offset": 5,
      "type": "word",
      "position": 1
    },
    {
      "token": "what's",
      "start_offset": 6,
      "end_offset": 12,
      "type": "word",
      "position": 2
    },
    {
      "token": "up",
      "start_offset": 13,
      "end_offset": 15,
      "type": "word",
      "position": 3
    }
  ]
}

为什么在令牌器工作时我无法检索任何文件?

1 个答案:

答案 0 :(得分:1)

您必须使用自定义分析器来执行您需要的标记化。

我很乐意提供一个例子 - 但是弹性论坛中的这篇文章给出了详细的答案。

https://discuss.elastic.co/t/how-to-index-special-characters-and-search-those-special-characters-in-elasticsearch/42506/2