2013-10-10 33 views
0

我是新来的elasticsearch,我试图配置同义词,但它不按预期工作。elasticsearch多个词synonms不工作

我已经在我的领域 1)赵彤铅,模块负责人,软件工程师,高级软件工程师

我想,如果我搜索TL那么它应该retun“技术领先”或“TL” 以下数据然而,它将我的“技术主管”和“模块主管”归还给我,因为主管在tme索引处被标记。

你能帮我解决这个问题,以确切的设置。

我已经看到索引时间和搜索时间标记化,但无法理解这一点。

synonyms.txt:

TL,TL =>技术主管

SE,SE =>软件工程师

SSE =>高级软件工程师

映射文件:

{ 
    "settings": { 
    "index": { 
     "analysis": { 
     "analyzer": { 
      "synonym": { 
      "tokenizer": "whitespace", 
      "filter": [ 
       "synonym" 
      ] 
      } 
     }, 
     "filter": { 
      "synonym": { 
      "type": "synonym", 
      "synonyms_path": "synonyms.txt" 
      } 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "tweet": { 
     "properties": { 
     "Domain": { 
      "type": "string", 
      "analyzer": "synonym" 
     }, 
     "Designation": { 
      "analyzer": "synonym", 
      "type": "string" 
     }, 
     "City": { 
      "type": "string", 
      "analyzer": "synonym" 
     } 
     } 
    } 
    } 
} 

回答

0

你的代币在这里完全相同,所以你有这个部分。你需要做的是确保你做的是“AND”匹配而不是“或”,因为它看起来只是匹配任何单词而不是全部。

退房您的令牌:

localhost:9200/test/_analyze?analyzer=synonym&text=technical lead 
localhost:9200/test/_analyze?analyzer=synonym&text=tl 

和查询

{ 
    "query": { 
     "match": { 
     "domain": { 
      "query": "tl", 
      "operator": "and" 
     } 
     } 
    } 
} 

通常你希望你的搜索和索引分析仪是相同的。但是,有许多先进的例子,这是不可取的。但是,在使用同义词的情况下,当您打开扩展时,通常不希望在一个或另一个中使用同义词。 ie tl,technical lead

但是,由于您使用的是=>类型的同义词,因此所有单词都将转换为右侧的单词,而不是为每个单词创建一组标记之间的逗号。