Elasticsearch如何分析数字字段?自动识别与分析机制咨询
Elasticsearch数字字段分析逻辑与文档指引
先说说我理解的你的场景:你有一份包含数字字段(price、modelYear)的文档:
{"date": "2018-04-29T00:36", "price": 11900, "sellerName": "Leif J", "description": "Nybesiktigad U.A 2018-04-28 vid 2291mil. 360 mil på senaste 6 åren. Ej vinterkörd, och varmgarage på varje vinterförvaring (i min ägo.) Extra utöver standard: -Eluppvärmda handtag (2läges) -LED lampor -Avtagbar packbox. -TK Hydrotech avgassystem (ca 10% effekt) Länkar nedan: https://www.youtube.com/watch?v=vqa_AiNq8-4 http://www.turbokit.net/#sthash.MboS0Bf2.dpbs Läs gärna Expressens omdöme* för mer info (*fel i artikeln=varvräknare finnes) https://www.expressen.se/motor/tester/en-fatolj-pa-hjul/ Billig i skatt / försäkring / drift. Kymco, Grand Dink, 150, Scooter, Maxi, Maxiscooter, Vespa, Piaggio", "location": "Malmö, Sydväst", "id": 0, "title": "Kymco Grand Dink 250", "modelYear": 2002, "url": "https://www.blocket.se/malmo/Kymco_Grand_Dink_250_79092265.htm?ca=11&w=3", "vehicleType": "Scooter"}
默认索引后,Elasticsearch自动识别出这两个是数字类型——你通过执行下面的查询,返回结果里数字字段无引号包裹,也验证了这一点:
POST _search { "query": { "bool": { "must": { "multi_match": { "fields": [ "title^1.0", "description" ], "operator": "or", "query": "honda", "type": "cross_fields" } } } } }
现在来解答你的两个问题:
一、数字字段是否会被分析?分析过程是怎样的?
默认情况下,数字类型字段是不会被分析的。
Elasticsearch里的数字字段(比如integer、long、double)属于结构化字段,它们的设计目标是支持精确匹配、范围查询(比如price > 10000)、聚合统计这类操作,不需要像文本字段那样进行分词处理。它们会直接以原始数值的形式被索引,完全跳过分析流程。
如果非要让数字字段被分析,你需要手动修改字段映射,把它设置为text类型(但这通常是不合理的,会丢失数字的结构化查询能力)。这时它会被当成普通文本处理:比如数值2002会被转换为字符串"2002",经过默认的标准分词器处理后,生成单个词条"2002"存入倒排索引。
二、相关官方文档的查阅位置
你要找的内容都在Elasticsearch官方文档里,具体可以看这些核心章节:
- 自动字段识别(动态映射):查看「Dynamic Mapping」章节,里面详细讲解了Elasticsearch如何自动检测字段类型,包括数字、日期、文本等类型的识别规则和触发条件。
- 数字字段的索引行为:在「Field Data Types」下找到对应数字类型(比如
integer、long)的说明页,里面会明确标注这类字段是否支持分析,以及它们的索引、查询逻辑。 - 整体分析流程:查阅「Analysis」章节,这里会系统讲解Elasticsearch的分析器、分词器、过滤器等组件的工作原理,以及不同字段类型如何应用分析逻辑。
内容的提问来源于stack exchange,提问作者Sahand




