elasticsearch Elasticsearch:使用哪个分析器通过某些特殊字符搜索文档,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch Elasticsearch:使用哪个分析器通过某些特殊字符搜索文档,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch Elasticsearch:使用哪个分析器通过某些特殊字符搜索文档

elasticsearch Elasticsearch:使用哪个分析器通过某些特殊字符搜索文档,elasticsearch,lucene,elasticsearch,Lucene,我希望能够在Elasticsearch上使用一些特殊字符和术语搜索一些文档。例如,如果我有以下文档: "HEY YOU! Thanks for reading this post!" 我希望能够使用如下查询字符串: { "query": { "query_string": { "default_field": "content", "query": "\"!\"" } } } 并将上一份文件作为结果。但我也希望能够通过查询获得文档: {

我希望能够在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"
    }
 }
}
我目前正在使用标准标记器,但我无法查询特殊字符,它不会返回任何文档。 是否已经为此类任务定义了标记器?我考虑不分析这个字段,但我不会用小写部分

编辑:

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

{
  "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
    }
  ]
}

为什么当tokeniser似乎正常工作时,我不能检索任何文档

您必须使用一个定制的分析器来完成您需要的标记化

我很想举个例子,但弹性论坛的这篇文章给出了详细的答案


我会根据你的回答更新我的问题