如何强制术语过滤器忽略停用词?

时间:2014-10-03 11:52:39

标签: elasticsearch

我有一个带有一堆字段的Elasticsearch索引,其中一些我想与默认的禁用词列表一起使用。另一方面,我有一个用户名字段,该字段应返回名为 等用户的结果。

当然,当我运行以下查询时:

{
    "query": {
        "constant_score": {
            "filter": {
                "terms": {
                    "username": [
                        "be"
                    ]
                }
            }
        }
    }
}

什么都没有。我已经看到了各种解决方案,用于更改标准分析器以删除停用词,但我很难找到我将如何仅针对这一个字段进行操作。谢谢你的任何指示。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:添加不应使用停用词的自定义分析器,然后仅针对您希望识别停用词的字段(例如username字段)明确指定此分析器。

PUT /stopwords
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_english": {
          "type": "english",
          "stopwords": "_none_"
        }
      }
    }
  },
  "mappings": {
    "text": {
      "properties": {
        "title": {
          "type": "string"
        },
        "content": {
          "type": "string"
        },
        "username": {
          "type": "string",
          "analyzer": "my_english"
        }
      }
    }
  }
}