亲,只收二进制

求助:nestde嵌套实现类似not exist的效果

FFFrp 回复了问题 • 2 人关注 • 1 个回复 • 5038 次浏览 • 2023-02-02 10:42 • 来自相关话题

ES集群总是会发生熔断,且已经做过扩容,请教下大佬

tacsklet 回复了问题 • 5 人关注 • 5 个回复 • 1369 次浏览 • 2023-01-20 11:48 • 来自相关话题

关于es7中的节点失效探测(fault_detection)参数

回复

shwtz 发起了问题 • 1 人关注 • 0 个回复 • 6047 次浏览 • 2023-01-17 14:56 • 来自相关话题

Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能

liuxg 发表了文章 • 0 个评论 • 7371 次浏览 • 2023-01-13 09:20 • 来自相关话题

原文地址 [elasticstack.blog.csdn.net](https://elasticstack.blog.csdn ... 655866)

![](https://img-blog.csdnimg.cn/im ... c6.png)

同义词用于提高搜索质量并扩大匹配范围。 例如,搜索 England 的用户可能希望找到包含 British 或 UK 的文档,尽管这三个词完全不同。

[Elasticsearch](https://so.csdn.net/so/search% ... 1.7020) 中的同义词功能非常强大,如果实施得当,可以使你的搜索引擎更加健壮和强大。 在本文中,我们将通过简单的代码片段介绍在实践中实现同义词功能的要点。 特别是,我们将介绍如何更新现有索引的同义词,这是一个相对高级的话题。

在今天的展示中,我将使用最新的 Elastic Stack 8.6.0,尽管版本不对我们的展示有任何的影响。

准备
==

我们将使用 Docker 在本地启动一个 Elasticsearch 服务器,并使用 [Kibana](https://so.csdn.net/so/search% ... 1.7020) 来管理索引和运行命令。 如果你以前从未使用过 Elasticsearch 或想快速复习一下,[这篇文章](https://elasticstack.blog.csdn ... 36411 "这篇文章")可能会对你有所帮助。 如果你在 Docker 中运行 Elasticsearch 时遇到问题,[这篇文章](https://elasticstack.blog.csdn ... 58356 "这篇文章")很可能会帮助你解决问题。在今天的文章中,我们尝试使用 docker 来部署一个没有安全功能的 Elasticsearch 集群。

准备就绪后,让我们开始探索 Elasticsearch 中的同义词功能的旅程。

我们将在本文中使用的 docker-compose.yaml 文件包含以下内容,稍后我们将向其添加更多功能:

docker-compose.yml

``<br />

  1. version: "3.9"
  2. services:
  3. elasticsearch:
  4. image: elasticsearch:8.6.0
  5. environment:
    • discovery.type=single-node
    • ES_JAVA_OPTS=-Xms1g -Xmx1g
    • xpack.security.enabled=false
  6. volumes:
    • type: volume
  7. source: es_data
  8. target: /usr/share/elasticsearch/data
  9. ports:
    • target: 9200
  10. published: 9200
  11. networks:
    • elastic

  12. kibana:
  13. image: kibana:8.6.0
  14. ports:
    • target: 5601
  15. published: 5601
  16. depends_on:
    • elasticsearch
  17. networks:
    • elastic

  18. volumes:
  19. es_data:
  20. driver: local

  21. networks:
  22. elastic:
  23. name: elastic
  24. driver: bridge

    ![](<a href="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.pn" rel="nofollow" target="_blank">https://csdnimg.cn/release/blo ... te.pn</a>g)<br /> ```<br /> <br /> 你可以使用以下命令之一启动 Elasticsearch 和 Kibana:<br /> <br /> ```<br /> docker-compose up<br /> ```<br /> <br /> 或者<br /> <br /> ```<br /> docker-compose up -d<br /> ```<br /> <br /> 如果加上 -d 选项的话,Elasticsearch 会以 daemon 的形式来运行。上面是一种最为简单的方式来启动 Elasticsearch 集群及 Kibana。由于它没有设置安全,我们无需输入任何凭证就可以直接进入到 Kibana 了。<br /> <br /> ![](<a href="https://img-blog.csdnimg.cn/5322f700631f42a5b15acb95ea91e574.pn" rel="nofollow" target="_blank">https://img-blog.csdnimg.cn/53 ... 74.pn</a>g)<br /> <br /> 使用带有同义词列表的标准同义词 token 过滤器<br /> =========================<br /> <br /> 让我们首先使用带有同义词列表的标准同义词标记过滤器创建一个索引。 在 Kibana 中运行以下命令,我们将在稍后解释详细信息: <br /> <br /> ```<br />

  25. PUT synonyms
  26. {
  27. "settings": {
  28. "index": {
  29. "analysis": {
  30. "analyzer": {
  31. "index_analyzer": {
  32. "tokenizer": "standard",
  33. "filter": [
  34. "lowercase",
  35. "synonym_filter"
  36. ]
  37. }
  38. },
  39. "filter": {
  40. "synonym_filter": {
  41. "type": "synonym",
  42. "synonyms": [
  43. "elk => Elastic Stack",
  44. "elkb => Elastic Stack"
  45. ]
  46. }
  47. }
  48. }
  49. }
  50. },
  51. "mappings": {
  52. "properties": {
  53. "name": {
  54. "type": "text",
  55. "analyzer": "index_analyzer"
  56. }
  57. }
  58. }
  59. }

    `![](https://csdnimg.cn/release/blo ... te.png)
    ```

    这里的要点

  60. 请注意设置键的嵌套级别。 settings => index => analysis => analyzer/filter 都是内置关键字。 但是,index_analyzer 和 synonym_filter 分别是自定义分析器和过滤器的自定义名称。
  61. 我们需要创建一个 type 为 synonym 的自定义过滤器。 synonym 选项明确提供了同义词列表。 这通常应该只用于测试,因为更新同义词列表不方便,我们稍后会看到。
  62. 本文中使用了 [Solr 同义词](https://www.elastic.co/guide/e ... onyms "Solr 同义词")。 对于此示例,使用了显式映射,这意味着 => 左侧的标记将替换为右侧的标记。 稍后我们将使用等同的同义词,这意味着提供的 token 被等同对待。
  63. synonym_filter 添加到名为 index_analyzer 的新自定义分析器的过滤器列表中。 通常过滤器的顺序很重要。 然而,对于同义词过滤器来说,它有点特殊,可能会让我们中的许多人感到惊讶。 在此示例中,即使 synonym_filter 过滤器放在小写过滤器之后,此过滤器返回的标记也会传递给小写过滤器,因此也会变成小写。 因此,你不需要在同义词列表或同义词文件中提供小写 token。
  64. 最后,在文档的映射中,为名称字段指定了自定义分析器。

    我们知道在早期的 Elastic 产品中 elk 就是 Elastic Stack 的代名词。之后随着 Beats 的加入,很多开发者也把 elkb 当做 Elastic Stack 的代名词。要测试在索引中创建的分析器,我们可以调用 _analyze 端点:

    ```


  65. GET /synonyms/_analyze
  66. {
  67. "analyzer": "index_analyzer",
  68. "text": "elk is powerful"
  69. }


    <br /> <br /> 上面命令的输出为:<br /> <br />
    `

  70. {
  71. "tokens": [
  72. {
  73. "token": "elastic",
  74. "start_offset": 0,
  75. "end_offset": 3,
  76. "type": "SYNONYM",
  77. "position": 0
  78. },
  79. {
  80. "token": "is",
  81. "start_offset": 4,
  82. "end_offset": 6,
  83. "type": "",
  84. "position": 1
  85. },
  86. {
  87. "token": "stack",
  88. "start_offset": 4,
  89. "end_offset": 6,
  90. "type": "SYNONYM",
  91. "position": 1
  92. },
  93. {
  94. "token": "powerful",
  95. "start_offset": 7,
  96. "end_offset": 15,
  97. "type": "",
  98. "position": 2
  99. }
  100. ]
  101. }

    `![](https://csdnimg.cn/release/blo ... te.png)
    <br /> <br /> 从上面的输出中,我们可以看到 type 为 SNONYM 的 token 为 elastic 及 stack。让我们向索引中添加一些文档并测试它在搜索中是否正常工作:<br /> <br />


  102. PUT /synonyms/_doc/1
  103. {
  104. "name": "elk is very powerful"
  105. }

  106. PUT /synonyms/_doc/2
  107. {
  108. "name": "elkb is useful"
  109. }

  110. PUT /synonyms/_doc/3
  111. {
  112. "name": "Elastic Stack is so widely used"
  113. }


    <br /> <br /> 我们可以使用 match 关键字进行简单的搜索:<br /> <br />


  114. GET /synonyms/_search?filter_path=**.hits
  115. {
  116. "query": {
  117. "match": {
  118. "name": "elk"
  119. }
  120. }
  121. }


    <br /> <br /> 如果没有问题,所有三个文件都应该被搜索到:<br /> <br />
    `

  122. {
  123. "hits": {
  124. "hits": [
  125. {
  126. "_index": "synonyms",
  127. "_id": "2",
  128. "_score": 0.31931418,
  129. "_source": {
  130. "name": "elkb is useful"
  131. }
  132. },
  133. {
  134. "_index": "synonyms",
  135. "_id": "1",
  136. "_score": 0.29086044,
  137. "_source": {
  138. "name": "elk is very powerful"
  139. }
  140. },
  141. {
  142. "_index": "synonyms",
  143. "_id": "3",
  144. "_score": 0.24686477,
  145. "_source": {
  146. "name": "Elastic Stack is so widely used"
  147. }
  148. }
  149. ]
  150. }
  151. }

    `![](https://csdnimg.cn/release/blo ... te.png)
    ```

    索引时间 vs 搜索时间进行同义词操作
    ===================

    如你所见,在上面的示例中,只创建了一个分析器,它用于索引和搜索。

    不鼓励在索引(indexing)步骤中对所有文档应用同义词,因为它有一些主要缺点:

    • 如果不重新索引所有内容,就无法更新同义词列表,这在实践中是非常低效的。
    • 搜索分数会受到影响,因为同义词 token 也会被计算在内。
    • 索引过程变得更加耗时并且索引将变得更大。 对于小数据集来说可以忽略不计,但对于大数据集来说非常重要。

      因此,最好在搜索步骤中只应用同义词,这样可以克服所有三个缺点。 为此,我们需要创建一个用于搜索的新分析器。

      使用 search_analyzer 并应用搜索时间同义词
      =============================

      在 Kibana 中运行以下命令以创建具有搜索时同义词的新索引:

      ``<br />

  152. PUT synonym_graph
  153. {
  154. "settings": {
  155. "index": {
  156. "analysis": {
  157. "analyzer": {
  158. "index_analyzer": {
  159. "tokenizer": "standard",
  160. "filter": [
  161. "lowercase"
  162. ]
  163. },
  164. "search_analyzer": {
  165. "tokenizer": "standard",
  166. "filter": [
  167. "lowercase",
  168. "synonym_filter"
  169. ]
  170. }
  171. },
  172. "filter": {
  173. "synonym_filter": {
  174. "type": "synonym_graph",
  175. "synonyms": [
  176. "elk => Elastic Stack",
  177. "elkb => Elastic Stack"
  178. ]
  179. }
  180. }
  181. }
  182. }
  183. },
  184. "mappings": {
  185. "properties": {
  186. "name": {
  187. "type": "text",
  188. "analyzer": "index_analyzer",
  189. "search_analyzer": "search_analyzer"
  190. }
  191. }
  192. }
  193. }

    `![](https://csdnimg.cn/release/blo ... te.png)
    ```

    关键点

    • 该类型现在更改为 [synonym_graph](https://www.elastic.co/guide/e ... .html "synonym_graph"),这是一个更复杂的同义词过滤器,旨在仅用作搜索分析器的一部分。 它可以更恰当地处理多词同义词,推荐用于搜索时分析。 但是,你可以继续使用原来的 synonym 类型,它在这篇文章中的表现是一样的。
    • 同义词过滤器从索引时间分析器中删除并添加到搜索时间分析器中。
    • search_analyzer 是为 name 字段明确指定的。 如果未指定,则相同的分析器 (index_analyzer) 将用于索引和搜索。

      分析器应该返回与以前相同的 token。 然而,当你用这些命令为三个文档建立索引并再次执行相同的搜索后,结果会有所不同:

      ```


  194. PUT /synonym_graph/_doc/1
  195. {
  196. "name": "elk is very powerful"
  197. }

  198. PUT /synonym_graph/_doc/2
  199. {
  200. "name": "elkb is useful"
  201. }

  202. PUT /synonym_graph/_doc/3
  203. {
  204. "name": "Elastic Stack is so widely used"
  205. }


    <br /> <br /> 我们使用如下的命令来进行搜索:<br /> <br />


  206. GET /synonym_graph/_search?filter_path=**.hits
  207. {
  208. "query": {
  209. "match": {
  210. "name": "elk"
  211. }
  212. }
  213. }


    <br /> <br /> 这一次,只有如下的结果返回。甚至 “elk is very powerful” 这个文档也没有被返回:<br /> <br />


  214. {
  215. "hits": {
  216. "hits": [
  217. {
  218. "_index": "synonym_graph",
  219. "_id": "3",
  220. "_score": 2.3589978,
  221. "_source": {
  222. "name": "Elastic Stack is so widely used"
  223. }
  224. }
  225. ]
  226. }
  227. }


    <br /> <br /> 原因是同义词过滤器仅在搜索时应用。 搜索查询 elk 被替换为同义词标记 “Elastic Stack”。 然而,索引中的文档没有被同义词过滤器(synonym_filter)过滤,因此 “elk” 只是被标记为 elk 而没有被 Elastic Stack 替换。 类似于 elkb。 结果,只能匹配 “Elastic Stack is so widely used”。<br /> <br /> 为了使其像前面的示例一样正常工作,我们需要将同义词规则从显式映射更改为等效同义词。 让我们按如下方式更新同义词过滤器:<br /> <br />


  228. ......
  229. "filter": {
  230. "synonym_filter": {
  231. "type": "synonym_graph",
  232. "synonyms": [
  233. "elk, elkb, Elastic Stack"
  234. ]
  235. }
  236. }
  237. ......


    <br /> <br /> 要更改现有索引的同义词,我们可以重新创建索引并重新索引所有文档,这是愚蠢且低效的。<br /> <br /> 更好的方法是更新索引的设置。 但是,我们需要在更新设置之前关闭索引,然后重新打开它才能访问它:<br /> <br />


  238. POST /synonym_graph/_close

  239. PUT /synonym_graph/_settings
  240. {
  241. "settings": {
  242. "index.analysis.filter.synonym_filter.synonyms": [
  243. "elk, elkb, Elastic Stack"
  244. ]
  245. }
  246. }

  247. POST /synonym_graph/_open


    <br /> <br /> 请注意更新索引设置的特殊语法。<br /> <br /> 运行上述命令后,我们可以通过如下命令的返回值来进行验证:<br /> <br />
    GET synonym_graph
    <br /> <br /> 上面的命令返回:<br /> <br />
    `

  248. {
  249. "synonym_graph": {
  250. "aliases": {},
  251. "mappings": {
  252. "properties": {
  253. "name": {
  254. "type": "text",
  255. "analyzer": "index_analyzer",
  256. "search_analyzer": "search_analyzer"
  257. }
  258. }
  259. },
  260. "settings": {
  261. "index": {
  262. "routing": {
  263. "allocation": {
  264. "include": {
  265. "_tier_preference": "data_content"
  266. }
  267. }
  268. },
  269. "number_of_shards": "1",
  270. "provided_name": "synonym_graph",
  271. "creation_date": "1673501061514",
  272. "analysis": {
  273. "filter": {
  274. "synonym_filter": {
  275. "type": "synonym_graph",
  276. "synonyms": [
  277. "elk, elkb, Elastic Stack"
  278. ]
  279. }
  280. },
  281. "analyzer": {
  282. "index_analyzer": {
  283. "filter": [
  284. "lowercase"
  285. ],
  286. "tokenizer": "standard"
  287. },
  288. "search_analyzer": {
  289. "filter": [
  290. "lowercase",
  291. "synonym_filter"
  292. ],
  293. "tokenizer": "standard"
  294. }
  295. }
  296. },
  297. "number_of_replicas": "1",
  298. "uuid": "UCIWtpQMTsCc1TwnvsywHA",
  299. "version": {
  300. "created": "8060099"
  301. }
  302. }
  303. }
  304. }
  305. }

    `![](https://csdnimg.cn/release/blo ... te.png)
    <br /> <br /> 让我们使用 _analyzer 端点测试 search_analyzer 并查看生成的 token:<br /> <br />


  306. GET /synonym_graph/_analyze
  307. {
  308. "analyzer": "search_analyzer",
  309. "text": "elk"
  310. }


    <br /> <br /> 上述命令返回:<br /> <br /> 它表明 elk 搜索查询被三个同义词的 token 替换和扩展(由 [expand](<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-graph-tokenfilter.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/e ... .html</a> "expand") 选项控制)。 它还证明,如果在索引时应用等效同义词,则结果索引的大小可以显着增加。<br /> <br /> 然后当我们再次执行相同的搜索时:<br /> <br />


  311. GET /synonym_graph/_search?filter_path=**.hits
  312. {
  313. "query": {
  314. "match": {
  315. "name": "elk"
  316. }
  317. }
  318. }


    <br /> <br /> 这次搜索的结果是:<br /> <br />
    `

  319. {
  320. "hits": {
  321. "hits": [
  322. {
  323. "_index": "synonym_graph",
  324. "_id": "3",
  325. "_score": 1.6949677,
  326. "_source": {
  327. "name": "Elastic Stack is so widely used"
  328. }
  329. },
  330. {
  331. "_index": "synonym_graph",
  332. "_id": "2",
  333. "_score": 1.1220688,
  334. "_source": {
  335. "name": "elkb is useful"
  336. }
  337. },
  338. {
  339. "_index": "synonym_graph",
  340. "_id": "1",
  341. "_score": 1.0126972,
  342. "_source": {
  343. "name": "elk is very powerful"
  344. }
  345. }
  346. ]
  347. }
  348. }

    `![](https://csdnimg.cn/release/blo ... te.png)
    ```

    我们可以看到三个文档都被搜索出来了。

    使用同义词文件
    =======

    上面我们一直在创建索引时直接指定同义词列表。 但是,当你有大量同义词时,将它们全部添加到索引中会很麻烦。 更好的方法是将它们存储在一个文件中,然后动态地将它们加载到索引中。 使用同义词文件有很多好处,其中包括:

    • 方便维护大量的同义词。
    • 可以被不同的索引使用。
    • 可以在不关闭索引的情况下动态重新加载。

      首先,我们需要先将同义词放入一个文件中。 每行都是一个同义词规则,与上面演示的相同。 更多[细节](https://www.elastic.co/guide/e ... yms_2 "细节")可以在官方文档中找到。

      我们将创建的同义词文件称为 synonyms.txt,但可以任意命名。 它具有以下内容:

      ```


  349. $ pwd
  350. /Users/liuxg/data/docker8
  351. $ ls
  352. docker-compose.yml synonyms.txt
  353. $ cat synonyms.txt
  354. This is a comment! The file is named synonyms.txt.

  355. elk,elkb,Elastic Stack


    <br /> <br /> 然后我们需要将同义词文件绑定到 Docker 容器中。 更新 docker-compose.yaml 如下:<br /> <br /> **docker-compose.yml**<br /> <br />
    `

  356. version: "3.9"
  357. services:
  358. elasticsearch:
  359. image: elasticsearch:8.6.0
  360. environment:
    • discovery.type=single-node
    • ES_JAVA_OPTS=-Xms1g -Xmx1g
    • xpack.security.enabled=false
  361. volumes:
    • type: volume
  362. source: es_data
  363. target: /usr/share/elasticsearch/data
    • type: bind
  364. source: ./synonyms.txt
  365. target: /usr/share/elasticsearch/config/synonyms.txt
  366. ports:
    • target: 9200
  367. published: 9200
  368. networks:
    • elastic

  369. kibana:
  370. image: kibana:8.6.0
  371. ports:
    • target: 5601
  372. published: 5601
  373. depends_on:
    • elasticsearch
  374. networks:
    • elastic

  375. volumes:
  376. es_data:
  377. driver: local

  378. networks:
  379. elastic:
  380. name: elastic
  381. driver: bridge

    `![](https://csdnimg.cn/release/blo ... te.png)
    <br /> <br /> 我们可以使用 CTRL+C 来终止之前运行的 docker,然后再次使用如下命令来启动:<br /> <br />
    docker-compose up
    <br /> <br /> 请注意,同义词文件已加载到容器中的 config 文件夹中。你可以进入容器并使用以下两个命令之一检查它:<br /> <br />


  382. User docker

  383. docker exec -it elasticsearch-1 bash

  384. User docker-compose

  385. docker-compose exec elasticsearch bash


    <br /> <br /> 现在我们需要停止并重新启动服务以使更改生效。 请注意,仅重新启动服务将不起作用。<br /> <br />


  386. docker-compose stop elasticsearch
  387. docker-compose up -d elasticsearch


    <br /> <br />


  388. $ docker ps
  389. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  390. 3ae4b728dd44 kibana:8.6.0 "/bin/tini -- /usr/l…" 23 seconds ago Up 21 seconds 0.0.0.0:5601->5601/tcp docker8-kibana-1
  391. 878c82384761 elasticsearch:8.6.0 "/bin/tini -- /usr/l…" 23 seconds ago Up 22 seconds 0.0.0.0:9200->9200/tcp, 9300/tcp docker8-elasticsearch-1
  392. $ docker exec -it docker8-elasticsearch-1 bash
  393. elasticsearch@878c82384761:~$ pwd
  394. /usr/share/elasticsearch
  395. elasticsearch@878c82384761:~$ ls
  396. LICENSE.txt NOTICE.txt README.asciidoc bin config data jdk lib logs modules plugins
  397. elasticsearch@878c82384761:~$ cd config/
  398. elasticsearch@878c82384761:~/config$ ls
  399. elasticsearch-plugins.example.yml jvm.options log4j2.properties synonyms.txt
  400. elasticsearch.keystore jvm.options.d role_mapping.yml users
  401. elasticsearch.yml log4j2.file.properties roles.yml users_roles


    <br /> <br /> 从上面的输出中,我们可以看到 synonyms.txt 已经被成功地加载到容器里了。<br /> <br /> 然后我们可以使用同义词文件创建一个新索引:<br /> <br />
    `

  402. PUT /synonym_graph_file
  403. {
  404. "settings": {
  405. "index": {
  406. "analysis": {
  407. "analyzer": {
  408. "index_analyzer": {
  409. "tokenizer": "standard",
  410. "filter": [
  411. "lowercase"
  412. ]
  413. },
  414. "search_analyzer": {
  415. "tokenizer": "standard",
  416. "filter": [
  417. "lowercase",
  418. "synonym_filter"
  419. ]
  420. }
  421. },
  422. "filter": {
  423. "synonym_filter": {
  424. "type": "synonym_graph",
  425. "synonyms_path": "synonyms.txt",
  426. "updateable": true
  427. }
  428. }
  429. }
  430. }
  431. },
  432. "mappings": {
  433. "properties": {
  434. "name": {
  435. "type": "text",
  436. "analyzer": "index_analyzer",
  437. "search_analyzer": "search_analyzer"
  438. }
  439. }
  440. }
  441. }

    `![](https://csdnimg.cn/release/blo ... te.png)
    ```

    关键点

    • 对于 synonyms_path,它是同义词文件相对于 Elasticsearch 服务器中 config 文件夹的路径。
    • 添加了一个新的 updateable 字段,它指定相应的过滤器是否可更新。 我们很快就会看到如何在不关闭和打开索引的情况下重新加载搜索分析器。

      这个新索引 synonym_graph_file 的行为应该与前一个 synonym_graph 的行为相同。

      现在让我们在同义词文件中添加更多的同义词,其内容如下:

      ```


  442. $ pwd
  443. /Users/liuxg/data/docker8
  444. $ ls
  445. docker-compose.yml synonyms.txt
  446. $ cat synonyms.txt
  447. This is a comment! The file is named synonyms.txt.

  448. elk,elkb,Elastic Stack
  449. JS => JavaScript
  450. TS => TypeScript
  451. Py => Python


    <br /> <br /> 添加同义词后,我们可以关闭并打开索引使其生效。 然而,由于我们将同义词过滤器标记为可更新,我们可以重新加载搜索分析器以使更改立即生效,而无需关闭索引,因此无需停机。<br /> <br /> 要重新加载索引的搜索分析器,我们需要调用 _reload_search_analyzers 端点:<br /> <br />
    POST /synonym_graph_file/_reload_search_analyzers
    <br /> <br /> 上面的命令输出为:<br /> <br />
    `

  452. {
  453. "_shards": {
  454. "total": 2,
  455. "successful": 1,
  456. "failed": 0
  457. },
  458. "reload_details": [
  459. {
  460. "index": "synonym_graph_file",
  461. "reloaded_analyzers": [
  462. "search_analyzer"
  463. ],
  464. "reloaded_node_ids": [
  465. "tZLy82KRTaiCdpsbkEYnuA"
  466. ]
  467. }
  468. ]
  469. }

    `![](https://csdnimg.cn/release/blo ... te.png)
    <br /> <br /> 现在,当我们分析 JS 字符串时,我们将看到返回的 javascript token。<br /> <br />


  470. GET /synonym_graph_file/_analyze
  471. {
  472. "analyzer": "search_analyzer",
  473. "text": "JS"
  474. }


    <br /> <br /> 上面的命令返回:<br /> <br />


  475. {
  476. "tokens": [
  477. {
  478. "token": "javascript",
  479. "start_offset": 0,
  480. "end_offset": 2,
  481. "type": "SYNONYM",
  482. "position": 0
  483. }
  484. ]
  485. }


    ```

    这里应该注意两件重要的事情:

    • 如果同义词过滤器的 updateable 设置为true,那么对应的分析器只能作为 search_analyzer 使用,不能用于索引,即使类型是同义词。
    • updateable 选项只能在同义词文件与 synonyms_path 选项一起使用时使用,而不是在同义词直接通过 synonyms 选项提供时使用。

      恭喜你到达这里! 我们已经涵盖了在 Elasticsearch 中使用同义词功能的所有要点。

      我们已经分别介绍了如何在索引时间和搜索时间分析步骤中使用同义词。 此外,还介绍了如何直接提供同义词列表,以及如何通过文件提供。 最后但同样重要的是,介绍了关于如何更新现有索引的同义词列表的不同方法。 建议重新加载索引的搜索分析器,因为它不会给服务带来停机时间。

白金版还能购买吗?怎么购买呢?

liuxg 回复了问题 • 2 人关注 • 1 个回复 • 5661 次浏览 • 2023-01-13 09:19 • 来自相关话题

大佬帮忙看看,es8.1.0源码打包报错

回复

dumplings 发起了问题 • 1 人关注 • 0 个回复 • 5685 次浏览 • 2023-01-09 22:11 • 来自相关话题

es7.17.8 centos7下安装,内网可访问,不能外网访问

God_lockin 回复了问题 • 2 人关注 • 1 个回复 • 2740 次浏览 • 2023-01-09 14:21 • 来自相关话题

回顾 2022 年 — 回顾 Elastic 这一年

liuxg 发表了文章 • 0 个评论 • 5129 次浏览 • 2023-01-07 21:10 • 来自相关话题

作者:Elastic Marketing

2022 年对 Elastic 来说是非凡的一年,我们在可观察性、安全性和企业搜索解决方案、新客户和深化合作伙伴关系方面引入了数十项创新。

在我们花点时间回顾过去的一年时,我们汇总了 2022 年的热门博文。希望你喜欢!

Elastic 8.0

在年初之际,我们还推出了 Elastic 8.0 的新篇章:速度、规模、相关性和简单性的新时代。 Elastic 8.0 是 7.x 系列多年投资的结晶,旨在减少内存使用和查询开销,并引入新功能以增强相关性。

例如,我们提高了日期直方图和搜索聚合的速度,增强了页面缓存的性能,并创建了一个新的 “预过滤” 搜索阶段。 此外,我们通过减少内存堆减少了资源需求以降低客户的总拥有成本,引入了使用更少存储的新方法,并使我们的客户能够通过新的冻结层和可搜索快照轻松地将计算与存储分离。

在 8.0 中,我们还为 Elasticsearch 带来了一整套原生矢量搜索功能,使客户和员工能够使用他们自己的词汇和语言搜索和接收高度相关的结果。

Machine Learning Relevance Tuning

作为 7.x 发布版中两年多工作的结晶,使向量搜索的实现更加实用,我们还引入了对近似最近邻搜索的原生支持 — 使得可以将基于向量的查询作用于基于向量词库进行比较快速、大规模地比较。 查看我们的自然语言处理 (NLP) 博客系列,获取部署矢量搜索的快速入门指南。

Elastic Security

随着 Elastic Security for Cloud 的推出,这也是 Elastic Security 具有里程碑意义的一年。 Elastic Security for Cloud 扩展了我们的 SIEM、安全分析和端点安全功能,在单个统一平台中提供了风险和状态管理、威胁监控和工作负载保护的新功能。

我们通过再次加倍承诺公开和透明的安全来结束这一年。 我们对开放式安全的承诺在 Forrester Wave™:安全分析平台,2022 年第 4 季度中得到进一步认可,其中 Elastic 被评为领导者,并指出“Elastic 在开放式产品中提供了令人难以置信的灵活性和可视化。”
 
更多阅读:https://elasticstack.blog.csdn ... 94458

如何处理文本带有数字连号——的范围段索引?

verb 回复了问题 • 3 人关注 • 2 个回复 • 1825 次浏览 • 2023-01-05 11:11 • 来自相关话题

es分片分配失败,集群状态由yellow转为red

Charele 回复了问题 • 2 人关注 • 1 个回复 • 2768 次浏览 • 2023-01-03 14:19 • 来自相关话题

es如何查询月日,例如我只想查8-5到9-15的信息,不需要年份,但是搜索的时候结果要带上

chenghao 回复了问题 • 4 人关注 • 3 个回复 • 1019 次浏览 • 2023-01-03 12:58 • 来自相关话题

Elasticsearch:使用 Node.js 将实时数据提取到 Elasticsearch 中(一)

liuxg 发表了文章 • 0 个评论 • 2745 次浏览 • 2023-01-03 12:51 • 来自相关话题

Elasticsearch 是一个强大的 RESTful 搜索和分析引擎,能够处理越来越多的用例。 它将集中存储你的数据,以实现闪电般的快速搜索、微调相关性以及可轻松扩展的强大分析。 关于如何使用 Elastic Stack(又名 ELK 堆栈)将数据摄取到 Elasticsearch 的资源有很多。在今天的文章中,我将详细介绍如何使用 Node.js 从零开始来把地震的实时数据采集到 Elasticsearch 中。

如果你选择的编程语言是 JavaScript,并且你需要使用 RESTful API 方法从第三方应用程序获取数据,那么使用 Node.js 获取数据是一个不错的选择。 你还可以托管服务器,让它持续实时摄取数据。 该演示将向您展示如何设置一个 Node.js + Express.js 服务器,该服务器实时将数据提取到 Elasticsearch 中,然后可以对这些数据进行分析并以有意义的方式采取行动。

对于此演示,我们将使用 USGS 实时发布的公开可用的全球地震数据。
更多阅读 https://elasticstack.blog.csdn ... 05743

elasticsearch refresh的疑问?

Charele 回复了问题 • 4 人关注 • 2 个回复 • 2099 次浏览 • 2022-12-20 00:46 • 来自相关话题

elasticsearch 索引创建后查询慢

Charele 回复了问题 • 2 人关注 • 1 个回复 • 1789 次浏览 • 2022-12-19 13:06 • 来自相关话题

elasticsearch6,bulk批量插入会有数据丢失

陈水鱼 回复了问题 • 2 人关注 • 1 个回复 • 2637 次浏览 • 2022-12-19 11:13 • 来自相关话题