我想在查询时使用其他分析器来撰写查询。

我从文档“Controlling Analysis”中得知这是可能的:



但是我不知道如何组成查询以便为不同的子句指定不同的分析器:

"query"  => [
    "bool" => [
        "must"   => [
            {
                "match": ["my_field": "My query"]
                "<ANALYZER>": <ANALYZER_1>
            }
        ],
        "should" => [
            {
                "match": ["my_field": "My query"]
                "<ANALYZER>": <ANALYZER_2>
            }
        ]
    ]
]

我知道我可以索引两个或更多不同的字段,但是我有很强的辅助内存约束,并且我不能索引相同的信息N次。

谢谢

最佳答案

如果还没有,则首先需要将自定义分析器映射到索引设置端点。

注意:如果索引存在并且正在运行,请确保先关闭它。
POST /my_index/_close
然后将自定义分析器映射到设置端点。

PUT /my_index/_settings
{
  "settings": {
    "analysis": {
      "analyzer": {
        "custom_analyzer1": {
          "type": "standard",
          "stopwords_path": "stopwords/stopwords.txt"
        },
        "custom_analyzer2": {
          "type": "standard",
          "stopwords": ["stop", "words"]
        }
      }
    }
  }
}

再次打开索引。
POST /my_index/_open
现在,您可以使用新的分析器查询索引。
GET /my_index/_search
{
  "query": {
    "bool": {
      "should": [{
        "match": {
          "field_1": {
            "query": "Hello world",
            "analyzer": "custom_analyzer1"
          }
        }
      }],
      "must": [{
        "match": {
          "field_2": {
            "query": "Stop words can be tough",
            "analyzer": "custom_analyzer2"
          }
        }
      }]
    }
  }
}

关于elasticsearch - 如何在查询时使用Elasticsearch指定其他分析器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37754132/

10-13 08:40