Elasticsearch找不到字母数字以外的字符

时间:2018-03-16 13:30:51

标签: elasticsearch

我遇到的问题是搜索除字母数字以外的其他字符。

我尝试过很多分析仪,但认为对于我的问题而言,“空白”是一个很好的选择。分析仪非常适合。

我创建了一个索引custom_doc并发布了一个doc {         " body":" ###井号的一些文字#inside",     }

但是我无法通过在查询字符串

中传递哈希来找到此文档
   {
    "query": {
        "bool": {
            "must": [
                {
                    "query_string": {
                        "fields": [
                            "body"
                        ],
                        "query": "#",
                        "analyzer": "whitespace"
                    }
                }
            ]
        }
    }
   }

然而,分析显示它已被正确标记

请求

{
    "analyzer": "whitespace",
    "text": "#"
}

结果

{
    "tokens": [
        {
            "token": "#",
            "start_offset": 0,
            "end_offset": 1,
            "type": "word",
            "position": 0
        }
    ]
}

没有自定义分析器,没有映射,没有其他过滤器。 我该如何解决这个问题?我检查了许多类似的问题而没有改进。有些人建议将该领域作为" not_analyzed"但是我仍然希望有可能在查询字符串中使用通配符,从而改变字段类型来自" text"到"关键字"也不适合我。例如。想要这个查询"所以*"返回发布的文件。

1 个答案:

答案 0 :(得分:0)

问题是您还需要在索引时指定whitespace分析器。仅在搜索时使用它是不够的,因为标准分析器已经删除了#符号来分析您的文本正文,因此,之后您无法搜索它们。

首先删除索引并使用以下映射重新创建它:

DELETE index
PUT index
{ 
  "mappings": {
    "doc": {
      "properties": {
        "body": {
          "type": "text",
          "analyzer": "whitespace",
          "search_analyzer": "whitespace"
        }
      }
    }
  }
}

然后索引你的文件:

PUT index/doc/1
{ "body": "some text with ### hash signs # inside"}

最后,您可以搜索#符号(请注意,您无需指定whitespace分析器):

POST index/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "query_string": {
                        "fields": [
                            "body"
                        ],
                        "query": "#"
                    }
                }
            ]
        }
    }
   }