ays*_*ysh 8 dsl elasticsearch elasticsearch-dsl
以下是获取精确匹配的查询
GET courses/_search
{
"query": {
"term" : {
"name.keyword": "Anthropology 230"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要找到Anthropology 230
和Anthropology 250 also
如何获得精确匹配
您犯的错误是您在关键字字段上使用术语查询,并且两者都没有被分析,这意味着它们尝试在反向索引中找到完全相同的搜索字符串。
您应该做的是:定义一个text
字段,如果您尚未定义映射,那么您无论如何都会拥有该字段。我还假设与您提到的查询相同,.keyword
如果您不定义映射,则会自动创建该查询。
现在您可以使用下面的匹配查询,该查询经过分析并使用标准分析器,该分析器在空格上分割标记,因此将为您的 2 个示例文档生成 和Anthropology
250
。230
简单高效的查询带来了文档
{
"query": {
"match" : {
"name" : "Anthropology 230"
}
}
}
Run Code Online (Sandbox Code Playgroud)
以及搜索结果
"hits": [
{
"_index": "matchterm",
"_type": "_doc",
"_id": "1",
"_score": 0.8754687,
"_source": {
"name": "Anthropology 230"
}
},
{
"_index": "matchterm",
"_type": "_doc",
"_id": "2",
"_score": 0.18232156,
"_source": {
"name": "Anthropology 250"
}
}
]
Run Code Online (Sandbox Code Playgroud)
上述查询匹配两个文档的原因是它在两个文档中创建了两个标记anthropology
and230
和 匹配。anthropology
您绝对应该阅读有关分析过程的信息,并且还可以尝试分析 API以查看为任何文本生成的标记。
分析文本的 API 输出
POST http://{{主机名}}:{{端口}}/{{索引名称}}/_analyze
{
"analyzer": "standard",
"text": "Anthropology 250"
}
{
"tokens": [
{
"token": "anthropology",
"start_offset": 0,
"end_offset": 12,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "250",
"start_offset": 13,
"end_offset": 16,
"type": "<NUM>",
"position": 1
}
]
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
258 次 |
最近记录: |