如何解决什么类型最适合 elasticsearch“KEYWORDS”如主题标签字段?
我想为关键字之类的东西制作 Elasticsearch 索引,比如..hashtag。 并为关键字制作同义词过滤器。
我认为索引关键字有两种方法,第一种是使 keyword
类型。
{
"settings": {
"keywordField": {
"type": "keyword"
}
}
}
如果用 League of Legends
建立索引
也许这个。
{
"keywordField": ["leagueoflegends","league","legends","lol" /* synonym */]
}
或 text
类型:
{
"settings": {
"keywordField": {
"type": "text","analyzer": "lowercase_and_whitespace_and_synonym_analyzer"
}
}
}
也许是这个。
{
"keywordField": ["league of legends"](synonym: lol => leagueoflegends)
}
如果此字段使用 _analyzer
api,则需要“leagueoflegends”、“league”、“legends”
搜索查询:'lol','league of Legends','League of Legends' 必须匹配这个字段。
哪种做法最好?
解决方法
添加一个包含索引数据、映射、搜索查询和搜索结果的工作示例。在下面的示例中,我采用了两个同义词 lol
和 leagueoflegends
索引映射:
{
"settings": {
"index": {
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym","synonyms": [
"leagueoflegends,lol"
]
}
},"analyzer": {
"synonym_analyzer": {
"filter": [
"lowercase","synonym_filter"
],"tokenizer": "standard"
}
}
}
}
},"mappings": {
"properties": {
"keywordField": {
"type": "text"
}
}
}
}
索引数据:
{
"keywordField": ["leagueoflegends","league","legends"]
}
搜索查询:
{
"query": {
"match": {
"keywordField": {
"query": "lol","analyzer": "synonym_analyzer"
}
}
}
}
搜索结果:
"hits": [
{
"_index": "66872989","_type": "_doc","_id": "1","_score": 0.19363807,"_source": {
"keywordField": [
"leagueoflegends","legends"
]
}
}
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。