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

标签 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"
    }
 }
}

我当前正在使用标准 token 生成器,但无法查询特殊字符,它不返回任何文档。
是否已经为此类任务定义了分词器?我考虑过不分析该 Realm ,但不会有小写部分。

编辑:

我创建了一个自定义分析器:
{
  "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": ";"
    }
 }
}

但我仍然没有任何结果。我尝试看看 token 生成器到底做了什么:
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
    }
  ]
}

当 token 生成器似乎正常工作时,为什么不能检索任何文档?

最佳答案

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

我想提供一个示例-但 flex 论坛中的此帖子提供了详细的答案。

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

关于elasticsearch - Elasticsearch:使用哪个分析器通过一些特殊字符搜索文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43764415/

相关文章:

json - 将elasticsearch.Config结构保存到JSON文件

python - 在 Django/ElasticSearch 中使用 HstoreField

elasticsearch - 对未索引字段的elasticsearch更新操作

java - SearcherManager maybeRefresh 方法没有发生

java - 是否有用于 Lucene 的快速、准确的荧光笔?

git - 持续将docker数据上的elasticsearch推送到S3

python - ElasticSearch-dsl 创建查询

elasticsearch - 在 elasticsearch 中为一个特定索引聚合时总和不正确

java - 如何获取ZZ_CMAP_PACKED中的word boundary?

search - 如何在 Solr Dismax 查询中正确提升结果