使用Elasticsearch搜索特殊字符

时间:2016-12-13 09:05:13

标签: elasticsearch

如何强制Elasticsearch query_string将'@'识别为简单字符?

假设我有一个索引,并且我在此声明中添加了一些文档:

<ReactNative.Navigator
  ...
  renderScene={this.renderScene.bind(this)} />


renderScene(route, navigationOperations, onComponentRef) {
  switch(route.index) {
    case 0:
      return <SearchPage />
  }
}

我想要这个搜索:

POST test/item/_bulk
{"text": "john.doe@gmail.com"} 
{"text": "john.doe@outlook.com"}
{"text": "john.doe@gmail.com, john.doe@outlook.com"}
{"text": "john.doe[at]gmail.com"}
{"text": "john.doe gmail.com"}

仅返回第一个第三个文档。

我尝试了3种映射: 首先我试过 -

GET test/item/_search
{
    "query": 
    {
        "query_string": 
        {
            "query": "*@gmail.com",
            "analyze_wildcard": "true",
            "allow_leading_wildcard": "true",
            "default_operator": "AND"
        }
    }
}

比我试过 -

PUT test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "email_analyzer": {
          "tokenizer": "email_tokenizer"
        }
      },
      "tokenizer": {
        "email_tokenizer": {
          "type": "uax_url_email"
        }
      }
    }
  },
  "mappings": {
    "item": {
      "properties": {
        "text": {
          "type": "string",
          "analyzer": "email_analyzer"
        }
      }
    }
  }
}

我也试过这个 -

PUT test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "whitespace"
        }
      }
    }
  },
  "mappings": {
    "item": {
      "properties": {
        "text": {
          "type": "string",
          "analyzer": "my_analyzer"
        }
      }
    }
  }
}

以上都没有,但实际上他们都归还了所有文件。 是否存在分析器/标记器/参数,使Elasticsearch能够像对待任何其他角色一样确认“@”符号

1 个答案:

答案 0 :(得分:1)

通过将文本分析为

,这与您的上一次设置有关
GET test/item/_search
{
    "query": 
    {
        "wildcard": 
        {
            "text": "*@gmail.com*"
        }
    }
}

使用未分析字段时,您应使用术语级别查询,但不能使用全文级别查询:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/term-level-queries.html