什么类型最适合 elasticsearch "KEYWORDS"(如主题标签)字段?
what types are best for elasticsearch "KEYWORDS"(like hashtags) field?
我想为某些关键字创建 Elasticsearch 索引,例如.. hashtag。
并对 KEYWORD 进行同义词过滤。
我认为索引关键字有两种方法,第一种是制作 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",
"league",
"legends"
]
}
}
]
我想为某些关键字创建 Elasticsearch 索引,例如.. hashtag。 并对 KEYWORD 进行同义词过滤。
我认为索引关键字有两种方法,第一种是制作 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",
"league",
"legends"
]
}
}
]