我在一个类型公司下面的一个字段,在我的弹性搜索索引中,它捕获了公司使用的技术。因此,访问我们网站的人可能会在搜索框中输入java
,Java
,C#
,c#
,.Net
,.net
等这些公司。
最初我以默认方式将其编入索引,然后我无法搜索.Net
或C#
,因为搜索查询中存在通配符。当我使用Net
或C
进行搜索时,它返回了使用C
或C#
的公司,这又是不正确的。
我做了一些研究,并将该字段的映射更改为"index": "not_analyzed"
并重新编制了公司索引。现在它返回了C#
和.Net
的正确公司,但在这种情况下失败的搜索字词不完全匹配。因此,当搜索字词为Java
时,它不会返回使用java
技术的公司,但在搜索字词java
时它会正确返回。我了解not_analyzed
要求完全匹配
如何对同一字段进行索引和查询以解决这两种情况?
答案 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
的文档编制索引时,它将被编入索引为java
,C#
为c#
,等等
这将带来不区分大小写的完全匹配的好处。