我想搜索一個短語并獲得所有結果(包括同義詞結果)。
我將我的索引配置如下:
"settings": {
"index": {
"analysis": {
"filter": {
"my_graph_synonyms": {
"type": "synonym_graph",
"synonyms": [
"Cosmos, Universe",
]
}
},
"analyzer": {
"my_search_time_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"stemmer",
"my_graph_synonyms"
]
}
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "standard",
"search_analyzer": "my_search_time_analyzer"
}
}
}
我在索引中添加了 2 個檔案:
PUT demo_idx/_doc/1
{
"content": "Cosmos A Spacetime Odyssey is a 2014 American science documentary television series."
}
PUT demo_idx/_doc/2
{
"content": "Universe A Spacetime Odyssey is a 2014 American science documentary television series."
}
我運行以下搜索:
"query": {
"bool": {
"must":
[{
"match": {
"content": {
"query": "Cosmos",
}
}
}]
}
}
我希望得到 2 個結果(按照同義詞),但我只得到一個。
如何運行搜索查詢(同時使用同義詞)并獲得 2 個結果?
uj5u.com熱心網友回復:
這是由于stemmer過濾器而發生的,如果您洗掉它并再次索引您的資料,它將回傳您兩個檔案,
您可以使用分析 API來檢查分析器生成的令牌,您可以看到Cosmos它生成了以下令牌
{
"tokens": [
{
"token": "univers", // Note this
"start_offset": 0,
"end_offset": 6,
"type": "SYNONYM",
"position": 0
},
{
"token": "cosmo",
"start_offset": 0,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
}
]
}
雖然standard在索引時使用的分詞器創建Universefor時Universe沒有對其進行詞干處理,因此它與您生成的搜索詞不匹配search_analyzer.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456485.html
標籤:弹性搜索
