美文网首页
ES-近义词查询

ES-近义词查询

作者: 一个菜鸟JAVA | 来源:发表于2020-02-20 16:49 被阅读0次

ES-近义词查询

在现实生活中,我们搜索"马铃薯"时,百度能给我找到马铃薯,土豆,洋芋等相关信息.因为在它们都是同一个东西或者是同义词.在ES中使用全文搜索时,我们也能实现同样的功能.官方介绍:Synonym graph

Synonym graph

ES内置提供 ```Synonym graph token filter````.我们可以使用它来实现我们我们上述功能.

  • 自定义分词器
PUT test_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_ik_max_word":{
          "type":"custom",
          "tokenizer":"ik_max_word",
          "filter":["graph_synonyms"]
        },
        "my_ik_smart":{
          "type":"custom",
          "tokenizer":"ik_smart",
          "filter":["graph_synonyms"]
        }
      },
      "filter": {
        "graph_synonyms":{
          "type":"synonym_graph",
          "synonyms_path":"analysis/synonym.txt"
        }
      }
    }
  }
}
  • 设置mapping
PUT test_index/_mapping
{
  "properties":{
    "content":{
      "type":"text",
      "analyzer":"my_ik_max_word"
    }
  }
}

上面需要注意的是我安装了ik分词器,然后自定义的分词器中的filter添加了Synonym graph token filter.synonyms_path的位置是以ES的config开始算的.所以我们需要创建{es}/config/analysis/synonym.txt文件来存放我们自定义的近义词表.近义词表中的格式如下:

土豆,洋芋 => 马铃薯
西红柿 => 番茄

接下来插入数据:

POST test_index/_doc
{
  "content":"番茄炒蛋是一道菜"
}
POST test_index/_doc
{
  "content":"我喜欢吃土豆"
}
POST test_index/_doc
{
  "content":"马铃薯可以做薯片"
}
POST test_index/_doc
{
  "content":"我喜欢吃西红柿"
}

查询数据:

GET test_index/_search
{
  "query": {
    "match": {
      "content": {
        "query": "洋芋",
        "analyzer": "my_ik_smart"
      }
    }
  }
}

结果如下:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.7199211,
    "hits" : [
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "03XBYXAB7AiRAPEjKnNG",
        "_score" : 0.7199211,
        "_source" : {
          "content" : "我喜欢吃土豆"
        }
      },
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "1HXBYXAB7AiRAPEjZHPB",
        "_score" : 0.7199211,
        "_source" : {
          "content" : "马铃薯可以做薯片"
        }
      }
    ]
  }
}

从搜索结果可以看出来,我们搜索的是洋芋,但是我喜欢吃土豆马铃薯可以做薯片都被搜索出来了.因为我们设置它们是近义词.

相关文章

  • ES-近义词查询

    ES-近义词查询 在现实生活中,我们搜索"马铃薯"时,百度能给我找到马铃薯,土豆,洋芋等相关信息.因为在它们都是同...

  • 近义词查询工具easySynonyms

    说明: 该工具是中文近义词查询工具,功能包含有: 单词近义词查询、两句子近义程度分析、句子拆解成单词,本工具使用的...

  • ES-查询搜索篇

    REST介绍 REST(REpresentational State Transfer),字面意思为“表述性状态传...

  • ES-查询语句说明

    查询所有命令: 结果 带参数查询: 分页查询:

  • Toastmaster word: aesthetic

    英 [iːs'θetɪk; es-] 美 [ɛs'θɛtɪk] adjectiveconcerned with...

  • elasticsearch php

    新建索引 $es->indices()->create(['index' => '库名']); 新进索引文档 $e...

  • 近义词

    没有眼泪的哭 其实是 没有欢乐的笑

  • 近义词

  • 近义词

    世间如此多近义词 却又不能删其余保一个。 美丽和漂亮不能等同,开心和快乐又不是同卵双胞胎。或许能被替代,是因为语境...

  • 那些永远记不住的单词|Aesthetic 美学审美【042】

    Aesthetic 英 [iːs'θetɪk; es-] 美 [ɛs'θɛtɪk] adj. 美的;美学的;审美的...

网友评论

      本文标题:ES-近义词查询

      本文链接:https://www.haomeiwen.com/subject/tigxqhtx.html