elasticsearch:我可以用 boost 定义同义词吗?

标签 elasticsearch synonym

假设ABC是同义词,我想定义B是“更接近” AC

所以当我搜索关键字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"
        }
      }
   }
  }
}

使用多字段映射,使感兴趣的字段被索引两次:

PUT /synonym_test/mytype/_mapping
{
   "properties":{
     "mood": {
       "type": "multi_field",
       "fields" : {
          "syn" : {"type" : "string", "analyzer" : "synonyms"},
          "no_syn" : {"type" : "string", "analyzer" : "no_synonyms"}
       }
     }
   }

}

索引测试文档:

POST /synonym_test/mytype/1
{
  mood:"elated"
}

在搜索时,提高字段中没有同义词的命中率。

GET /synonym_test/mytype/_search
{
  query: {
    bool: {
      should: [
          { match: { "mood.syn" : { query: "gleeful", "boost": 3 } } },
          { match: { "mood.no_syn" : "gleeful" } }
      ]
    }
  }

}

结果 _score":0.2696457

搜索原始术语会返回更好的分数:

GET /synonym_test/mytype/_search
{
  query: {
    bool: {
      should: [
          { match: { "mood.syn" : { query: "elated", "boost": 3 } } },
          { match: { "mood.no_syn" : "elated" } }
      ]
    }
  }

}

结果:_score":0.6558018,"

关于elasticsearch:我可以用 boost 定义同义词吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17334214/

相关文章:

elasticsearch - 在Elastic中索引海量数据的最快方法

sql - 在Oracle中,为什么删除表分区时公共(public)同义词会失效

sql-server - SQL SYNONYM 和性能

haskell - 约束类型的同义词

sql-server - 在 MS SQL Server 2005 中编辑同义词

php - 同义词查找算法

elasticsearch - 如何通过内部对象搜索ElasticSearch

elasticsearch - Elastic Search Bulk 忽略 json 中提供的最后一个操作

elasticsearch - 带有filebeat的Elasticsearch中的动态索引

php - Elasticsearch过滤器中至少一个嵌套值大于零