• wsstony
    2019-09-08
    您好,请教一下,对于多语言场景,最佳实践是怎么处理的?比如一个产品需要同时支持德语,法语,俄罗斯语,阿拉伯语等多种语言时,是如何选择分词器?如果建模的?

    作者回复: 方案1。 不同语言用不同索引,例如 orders-cn ,orders-en

    方案二:可以通过设置mulfi field 为期创建多个子字段,这个子字段可以使用不同的分词器。

    至于用户在搜索的时候使用什么语言,可以让用户指定,或者通过http header中的accept language来判定。

    至于你索引的数据,如果你明确知道他所用的语言,用方案一会很简单。否则你需要使用一个学习算法对文档的语言进行归类。有一些现成的库可以使用,例如

    chromiu-compact-language-detector ,基于google的CLD开发,支持160多种语言的detect

    
     3
  • 氧气🌙 🐟 🌺
    2019-08-01
    代码段一:
    POST address/_search
    {
      "query": {
        "multi_match": {
          "query": "Poland Street W1V",
          "type": "most_fields",
          //"operator": "and",
          "fields": ["street", "city", "country", "postcode"]
        }
      }
    }
    算分:"_score" : 0.8630463,

    代码段二:
    POST address/_search
    {
      "query": {
        "multi_match": {
          "query": "Poland Street W1V",
          "type": "cross_fields",
          "operator": "and",
          "fields": ["street", "city", "country", "postcode"]
        }
      }
    }
    算分:"_score" : 0.8630463,

    代码段三:
    POST address/_search
    {
      "query": {
        "multi_match": {
          "query": "Poland Street W1V",
          "type": "cross_fields",
          "operator": "or",
          "fields": ["street", "city", "country", "postcode"]
        }
      }
    }
    算分:"_score" : 0.8630463,

    问题一:代码段一和二的结果算分一样。用most_fields不加operator也能查到,为何还要用cross_fields?
    问题二:代码段二和三的operator不同,算分也一样,这里的operator起什么作用呢?
    展开
    
     2
  • 我来也
    2019-07-26
    这篇文章来的非常及时!
    正好在做一个搜索功能,需要中文加拼音混合搜索。
    之前已经用了ik+pinyin分词,词可以分出来了,

    作者回复: 👍

    
     2
  • 抱团团长
    2019-09-09
    我在docker中上传了添加ik、pinyin、hanlp三种分词器的elasticsearch镜像。只需要在docker-compose.yaml文件中修改elasticsearch的配置:image: pengliwds/elasticsearch-analysis:7.1.0

    作者回复: 赞👍

    
     1
  • zj
    2019-07-26
    如果老师能讲一下类似淘宝直通车案例就好啦,或者老师这方面系统有没有推荐的技术文章可以推荐我们看一下哈

    作者回复: 具体是指哪方面的需求?

     2
     1
  • 刘志
    2019-07-24
    老师能否给出在docker容器里(运行着ES/Kibana)安装那些分词器插件的命令?

    作者回复: 第一种方式,需要写Dockerfile,然后去build出你特定的image。你查一下如何写docker image,然后只需要吧插件安装那行命令写进dockerfile即可

    第二种,运行后attach到container中,执行plugin 安装的命令,但是container销毁后,需要重做

     5
     1
  • 老司机小小阿姨
    2019-09-24
    老师,Elasticsearch同时用ik和Elasticsearch会影响性能吗?正常情况,会混合一起使用吗

    作者回复: 有中文分词的需求 可以一起使用啊。担心性能 可以做一个性能测试,看看是否满足你的实际负载

    
    
  • godtrue
    2019-09-20
    多语言尤其是中文分词确实复杂,幸好有了,这么多强大的插件。还记得自己之前做过的一个需求通过拼音也能搜索的功能,基于数据库搞的生僻字多音字很麻烦,几乎无法处理?不知道针对多音字这些分词器怎么转化?
    
    
  • Cybertrunk
    2019-08-29
    ES两点很不爽,安了插件居然要重启ES。太逊了!
    第二个,一共3个节点,我先把master节点干掉,留两个master eligible节点,期望其中一个能选为新的master,不幸的是好像整个ES集群就停掉不干活了。我还说靠这种办法来,达到不间断服务呢。

    作者回复: 第一个确实如此。需要rolling restart。
    第二个应该不会这样。

     1
    
  • 红发-;
    2019-08-27
    老师,请教一下,plugin离线安装,install只能是二进制文件吧?自己编写Dockerfile,使用下载的zip文件是不是解压后还要自行配置对应插件的配置文件

    作者回复: 1. install 必须提供zip文件
    2. 如果安装后需要修改相应目录下的文件,你需要通过在dockerfile中写shell脚本去执行这一些列的操作

    
    
  • John
    2019-08-24
    這幾個分詞器很重要 講的非常好
    
    
  • Geek_Dream
    2019-08-23
    你好,阮老师,我再执行
    PUT /my_index
    {
      "mappings": {
        "blog": {
          "properties": {
            "title": {
              "type": "string",
              "analyzer": "english"
            }
          }
        }
      }
    }
    这条语句的时候,有报错信息如下:
    {
      "error": {
        "root_cause": [
          {
            "type": "mapper_parsing_exception",
            "reason": "Root mapping definition has unsupported parameters: [blog : {properties={title={analyzer=english, type=string}}}]"
          }
        ],
        "type": "mapper_parsing_exception",
        "reason": "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [blog : {properties={title={analyzer=english, type=string}}}]",
        "caused_by": {
          "type": "mapper_parsing_exception",
          "reason": "Root mapping definition has unsupported parameters: [blog : {properties={title={analyzer=english, type=string}}}]"
        }
      },
      "status": 400
    }
    请问如何解决,麻烦有时间看到我的留言提供一下思路,谢谢
    展开
    
    
  • 郭刚
    2019-08-13
    老师,elasticsearch-analysis-pinyin-7.3.0.zip的版本如何下载?

    作者回复: 找到github,点开release,提过没有就需要等一下。有些插件需要一定时间才能跟上最新的版本

    
    
  • 我来也
    2019-08-09
    老师,最近遇到一个奇怪的现象,在单机中安装了jieba插件,ik分词插件,pinyin分词插件,其中jieba插件未使用,但是es访问就很慢,本机用curl查询健康状况都慢。
    把jieba分词插件删除后,就恢复了正常。
    本机是用的docker中的es。测试时重置了docker,还是很慢。(之前一段时间有这个插件也相安无事)

    比较好奇,未使用的插件也会对es产生影响么?(看docker logs日志时会有jieba相关的日志。)
    es和插件版本都是6.2的。
    展开

    作者回复: 你可以把相关的问题提到jieba的github上。按照道理你index和search都没有使用,应该不会有什么开销。分词一般会对cpu有开销,你的es慢,你看是cpu消耗大还是有内存方面的gc?

     1
    
  • 杰锅不是锅
    2019-07-31
    老师,一直有个疑问,用了分词的索引字段,elastic 会自动把分词存到索引里面吗?原理是什么?可能我表达不怎么准确。

    作者回复: 数据写入的时候,就会按照字段进行分词并且存入倒排表里

    
    
  • 超威丶
    2019-07-28
    老师,目前使用IK分词器,出现一个问题:
    首先这是mapping定义:
    PUT test_index
    {
      "mappings": {
        "doc": {
          "properties": {
            "name":{
              "type": "text",
              "analyzer": "ik_max_word", //"ik_max_word",
              "search_analyzer": "ik_smart"
            }
          }
          
        }
        
      }
      
    }

    然后推入数据:
    PUT /test_index/doc/1
    {
        "name": "张三"
    }

    PUT /test_index/doc/2
    {
        "name": "张三丰"
    }

    PUT /test_index/doc/3
    {
        "name": "张三丰feng"
    }

    PUT /test_index/doc/4
    {
        "name": "张"
    }

    PUT /test_index/doc/5
    {
        "name": "三"
    }

    此时我去查询结果,发现排在最前面的不是“三”这条数据,而是“张三丰”这条数据,感觉很疑惑
    POST /test_index/_search
    {
      "explain": true,
        "query": {
          "term": {
            "name": {
              "value": "三"
            }
          }
        }
    }
    展开

    作者回复: 这不能吧?肯定是
    三
    张三
    张三丰
    张三丰feng

    的排列。我还测试了一下,没有错的

     1
    
我们在线,来聊聊吧