RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 687240
Accepted
Dmitry
Dmitry
Asked:2020-07-04 23:32:43 +0000 UTC2020-07-04 23:32:43 +0000 UTC 2020-07-04 23:32:43 +0000 UTC

如何正确使用 ElasticSearch 分析器?

  • 772

同事。我正在使用 5.4.3 和analysis-morphology 5.4.3

POST /categories/_close
PUT categories/_settings
{"settings": {
    "index": {
        "analysis" : {
            "analyzer" : {
                "my_search_analyzer" : {
                    "type": "custom",
                       "tokenizer" : "standard",
                       "filter" : ["lowercase", "search_synonym","russian_morphology", "english_morphology", "ru_stopwords", "russian"]
                  }
             },
          "filter" : {
                "search_synonym" : {
                    "ignore_case" : "true",
                    "type" : "synonym",
                    "synonyms" : ["пончо,накидка"]
                 },
                "ru_stopwords" : {
                    "type" : "stop",
                    "stopwords" : "а,без,более,бы,был,была,были,было,быть,в,вам,вас,весь,во,вот,все,всего,всех,вы,где,да,даже,для,до,его,ее,если,есть,еще,же,за,здесь,и,из,или,им,их,к,как,ко,когда,кто,ли,либо,мне,может,мы,на,надо,наш,не,него,нее,нет,ни,них,но,ну,о,об,однако,он,она,они,оно,от,очень,по,под,при,с,со,так,также,такой,там,те,тем,то,того,тоже,той,только,том,ты,у,уже,хотя,чего,чей,чем,что,чтобы,чье,чья,эта,эти,это,я,a,an,and,are,as,at,be,but,by,for,if,in,into,is,it,no,not,of,on,or,such,that,the,their,then,there,these,they,this,to,was,will,with"
                 }
           }
    }
   }
   },
   "mappings": {
    "mydoc_data": {
        "properties": {
            "title": {
                "type": "string",
                    "analyzer": "my_search_analyzer"
                  },
                  "description": {
                "type": "string",
                    "analyzer": "my_search_analyzer"
                  }
             }
         }
   }
  }
POST /categories/_open

"acknowledged": true 我正在寻找的结果是这样的:

GET /categories/_search/
{
    "query":{
    "match": {
        "_all": "накидка"
    }
  }
}

"cape" - 没有找到 "cape" - 找到

我正在寻找的文件:

{
"took": 23,
"timed_out": false,
"_shards": {
"total": 11,
"successful": 11,
"failed": 0
},
"hits": {
    "total": 2,
    "max_score": 5.8937645,
    "hits": [
      {
          "_index": "categories",
        "_type": "categories",
        "_id": "7672",
        "_score": 5.8937645,
        "_source": {
          "title": "Накидки",
          "code": "nakidki",
          "parent_id": 7668,
          "lft": 15343,
          "rgt": 15344,
          "updated_at": "2017-07-04 11:40:43",
          "created_at": "2017-07-04 11:40:43",
          "id": 7672
        }
      },
      {
          "_index": "categories",
        "_type": "categories",
        "_id": "5682",
        "_score": 5.115262,
        "_source": {
          "title": "Чехлы и накидки на сиденья",
          "code": "chehlyi-i-nakidki-na-sidenya",
          "parent_id": 5676,
          "lft": 11363,
          "rgt": 11364,
          "updated_at": "2017-07-04 11:37:34",
          "created_at": "2017-07-04 11:37:34",
          "id": 5682
        }
      }
    ]
  }
}

我究竟做错了什么?

elasticsearch
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Andrey Morozov
    2020-07-05T21:17:16Z2020-07-05T21:17:16Z

    _all 将其他字段的值以空格作为分隔符进行组合,并使用标准解析器进行解析。标准分析器不会将“斗篷”变成“斗篷”。在这种情况下映射不起作用。

    如果您在标题中写入“ Covers and seat covers ”,那么以下标记“and”、“on”、“covers”、“seats”、“covers”将归入_all。匹配 "match": {"_all": "cloak "} 将不会被找到。


    解决方案

    如果您想使用解析器,那么您需要在特定字段上使用搜索,例如,使用multi_match,而不是在 __all 上。

    {
      "query": {
        "multi_match" : {
          "query":    "накидка", 
          "fields": [ "title", "description" ],
          "analyzer": "my_search_analyzer"
        }
      }
    }
    

    在这里您可以微调您的搜索。我还建议在查询中使用与索引时相同的分析器。这对于拆分成相同的令牌是必要的。

    将“russian_morphology”解析器与“russian”一起使用是个坏主意。在他看来,俄语通常会把话说得太过分,直截了当。您需要留下一件事,很可能是“russian_morphology”。否则的话,很难弄明白这个字为什么会变成这么复杂的信物。

    我们检查:

    curl -X POST "http://localhost:9200/categories/_analyze?analyzer=russian&pretty=true" -d 'накидки'
    
    {
      "tokens" : [ {
        "token" : "накидк",
        "start_offset" : 0,
        "end_offset" : 7,
        "type" : "<ALPHANUM>",
        "position" : 0
      } ]
    } 
    
    
    curl -X POST "http://localhost:9200/categories/_analyze?analyzer=russian_morphology&pretty=true" -d 'накидки'
    
    {
      "tokens" : [ {
        "token" : "накидка",
        "start_offset" : 0,
        "end_offset" : 7,
        "type" : "<ALPHANUM>",
        "position" : 0
      } ]
    }
    

    我更喜欢第二种选择。

    • 5

相关问题

  • 考虑俄语和英语声音的文本搜索

  • 如何计算 Elasticsearch 中两个字段之间的差异?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5