在同一文本字段上使用术语和匹配查询?

时间:2017-07-05 04:26:10

标签: elasticsearch

我有一个带有文本字段的索引。

"state": {
  "type": "text"
}

现在假设有两个数据。

"state": "vail"
and
"state": "eagle vail"

根据我的要求之一,
  - 我需要做一个术语级别的查询,这样如果我输入“vail”,搜索结果应该只返回带有“vail”而不是“eagle vail”的状态。

但是对同一索引进行不同搜索的另一个要求是,   - 我需要对全文搜索进行匹配查询,这样如果我输入“vail”,也会显示“eagle vail”。

所以我的问题是,如何在这个字段中进行术语级别和全文搜索,就像进行术语级别查询一样,我必须将其设置为“关键字”类型,以便不进行分析。 / p>

1 个答案:

答案 0 :(得分:1)

您可以使用"多字段"实现这一目标的功能。这是一个映射:

{
    "mappings": {
        "my_type": {
            "properties": {
                "state": {
                    "type": "text",
                    "fields": {
                        "raw": {
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }
}

在这种情况下,state将充当text字段(已标记化),而state.raw将为keyword(单令牌)。索引文档时,只应设置state。将自动创建state.raw