如何搜索#或。在Elasticsearch中

时间:2016-04-06 11:18:44

标签: elasticsearch

我在一个类型公司下面的一个字段,在我的弹性搜索索引中,它捕获了公司使用的技术。因此,访问我们网站的人可能会在搜索框中输入javaJavaC#c#.Net.net等这些公司。

最初我以默认方式将其编入索引,然后我无法搜索.NetC#,因为搜索查询中存在通配符。当我使用NetC进行搜索时,它返回了使用CC#的公司,这又是不正确的。

我做了一些研究,并将该字段的映射更改为"index": "not_analyzed"并重新编制了公司索引。现在它返回了C#.Net的正确公司,但在这种情况下失败的搜索字词不完全匹配。因此,当搜索字词为Java时,它不会返回使用java技术的公司,但在搜索字词java时它会正确返回。我了解not_analyzed要求完全匹配

如何对同一字段进行索引和查询以解决这两种情况?

1 个答案:

答案 0 :(得分:2)

实现所需目标的方法是创建一个比not_analyzed更多的自定义分析器,即小写术语。

curl -XPUT localhost:9200/test_index -d '{
  "settings": {
    "analysis": {
      "analyzer": {
        "lowercase_keyword": {
          "type": "custom",
          "tokenizer": "keyword",
          "filter": [ "lowercase" ]
        }
      }
    }
  },
  "mappings": {
    "test_type": {
      "properties": {
        "name": {
          "type": "string",
          "analyzer": "lowercase_keyword"
        }
      }
    }
  }
}'

然后,当您对包含Java的文档编制索引时,它将被编入索引为javaC#c#,等等

这将带来不区分大小写的完全匹配的好处。