chr*_*yue 4 synonym elasticsearch
比方说A,B,C是同义词,我想定义B是"接近" A比C
所以当我搜索关键字时A,在搜索结果中,A第一个B是第二个,第二个C是最后一个.
有帮助吗?
没有搜索时机制(截至目前)来区分同义词和源字段上的匹配.这是因为,当索引时,字段的同义词被放置在原始术语旁边的倒排索引中,使所有单词保持相等.
这并不是说你不能在索引时做一些魔法来收集你想要的信息.
使用两个分析器创建索引:一个具有同义词过滤器,另一个没有.
PUT /synonym_test/
{
settings : {
analysis : {
analyzer : {
"no_synonyms" : {
tokenizer : "lowercase"
},
"synonyms" : {
tokenizer : "lowercase",
filter : ["synonym"]
}
},
filter : {
synonym : {
type : "synonym",
format: "wordnet",
synonyms_path: "prolog/wn_s.pl"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用多字段映射,以便将感兴趣的字段编入索引两次:
PUT /synonym_test/mytype/_mapping
{
"properties":{
"mood": {
"type": "multi_field",
"fields" : {
"syn" : {"type" : "string", "analyzer" : "synonyms"},
"no_syn" : {"type" : "string", "analyzer" : "no_synonyms"}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
索引测试文档:
POST /synonym_test/mytype/1
{
mood:"elated"
}
Run Code Online (Sandbox Code Playgroud)
在搜索时,提高场上命中的得分,没有同义词.
GET /synonym_test/mytype/_search
{
query: {
bool: {
should: [
{ match: { "mood.syn" : { query: "gleeful", "boost": 3 } } },
{ match: { "mood.no_syn" : "gleeful" } }
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果_score":0.2696457
搜索原始术语会得到更好的分数:
GET /synonym_test/mytype/_search
{
query: {
bool: {
should: [
{ match: { "mood.syn" : { query: "elated", "boost": 3 } } },
{ match: { "mood.no_syn" : "elated" } }
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果:_score":0.6558018,"
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |