elasticsearch,docker-compose,windows-subsystem-for-linux,docker-for-windows,Docker,elasticsearch,Docker Compose,Windows Subsystem For Linux,Docker For Windows" /> elasticsearch,docker-compose,windows-subsystem-for-linux,docker-for-windows,Docker,elasticsearch,Docker Compose,Windows Subsystem For Linux,Docker For Windows" />

Docker 无法在ElasticSearch上加载并使用同义词.txt文件

Docker 无法在ElasticSearch上加载并使用同义词.txt文件,docker,elasticsearch,docker-compose,windows-subsystem-for-linux,docker-for-windows,Docker,elasticsearch,Docker Compose,Windows Subsystem For Linux,Docker For Windows,我正在使用以下docker-compose.yml创建ElasticSearch群集: version: '3.3' services: elasticsearch1: image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 container_name: elasticsearch1 environment: ... ulimits: memlock: so

我正在使用以下docker-compose.yml创建ElasticSearch群集:

version: '3.3'
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: elasticsearch1
    environment:
      ...
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
      - ${PWD}/data/thesaurus/output:/usr/share/elasticsearch/config/extra
    ports:
      - 9200:9200
    networks:
      - elastic
  elasticsearch2:
    ...
volumes:
  data01:
    driver: local
  data02:
    driver: local
networks:
  elastic:
    driver: bridge
我的索引包含:

  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1,
    "index" : {
      "analysis" : {
          "filter" : {
              "synonym" : {
                  "type" : "synonym", 
                  "synonyms_path" : "extra/synonym.txt"
              }
          },
          "analyzer" : {
              "synonym" : {
                  "tokenizer" : "standard",
                  "filter" : ["lowercase", "synonym"] 
              }
          }
      }
    }
当我尝试
放入我的数据时,我得到:

{'error':{'root_cause':[{'type':'非法参数_exception','reason':'无法构建同义词','type':'非法参数_exception','reason':'无法构建同义词','caused'由':{'type':'i__exception','reason':'是目录},'状态:'400}
有趣的是,当我运行:
docker exec elasticsearch1 cat config/extra/synonym.txt
时,我得到一个错误:
cat:config/extra/synonym.txt:是一个目录


如何加载和使用synonym.txt文件?

如弹性文档中所述-:

上面配置了一个同义词过滤器,其路径为 analysis/synonym.txt(相对于配置位置)。同义词 然后使用过滤器配置分析仪

因此,您将替换同义词路径

"synonyms_path" : "/extra/synonym.txt" 
在:


事实证明,这是WSL的一个问题——请参见:github.com/docker/for-win/issues/2151

作为一种解决方法,我将synonym.txt放在Windows目录中,然后链接到它,如下所示:

    volumes:
      - data01:/usr/share/elasticsearch/data
      - /c/QAMaker:/usr/share/elasticsearch/config/extra

注意:我的Windows文件系统安装在Docker for Windows和WSL发行版的
/c
。。。如果在我的发行版中,Windows文件系统安装在默认的
/mnt/c

上,我不确定这是否可行。谢谢,但它仍然不起作用。。。请参阅更新的问题。请尝试docker exec-it elasticsearch1/bin/bash,然后尝试ls-al/usr/share/elasticsearch/config/extra/此文件夹的内容是什么?我认为它只是一个synonym.txt目录,对吗?docker之外的${PWD}/data/thesaurus/output的内容是什么?docker在这里创建了一个synonym.txt文件夹?这是WSL的一个问题。。。无论如何,谢谢你的帮助。我认为我的问题是由于WSL:
    volumes:
      - data01:/usr/share/elasticsearch/data
      - /c/QAMaker:/usr/share/elasticsearch/config/extra