1

我正在尝试对_id我的弹性搜索实例中的字段执行部分单词匹配。

在搜索了官方文档后,我发现最好的方法是创建一个 n-gram 分析器,所以Sense我这样做了:

PUT /index2
{"settings": {
    "number_of_shards": 1, 
    "analysis": {
        "filter": {
            "partial_filter": { 
                "type":     "ngram",
                "min_gram": 2,
                "max_gram": 20
            }
        },
        "analyzer": {
            "partial": {
                "type":      "custom",
                "tokenizer": "standard",
                "filter": [
                    "lowercase",
                    "partial_filter" 
                ]
            }
        }
    }
}}

我尝试使用以下方法测试分析仪:

POST /index2/_analyze
{
  "analyzer": "partial",
  "text": "brown fox"
}

它按预期工作,产生了适当的组合。下一步应该是将分析器应用于相关字段,所以我尝试这样做:

PUT /index2/_mapping/type2
{
    "type2": {
        "properties": {
            "_id": {
                "type":     "string",
                "analyzer": "partial"
            }
        }
    }
}

但我收到一个错误:

“原因”:“字段 [_id] 在 [type2] 中定义了两次”

可能是因为 _id 字段是在创建过程中index2与分析器一起创建的。

所以我的问题是如何在 _id 字段上使用部分搜索?有没有其他方法可以做到这一点?

提前致谢!

4

0 回答 0