我有一个名为“description”的字段(输入文本)
我有三个文件。
doc1 description =“测试”
doc2 description =“测试dsc”
doc3 description =“2021年测试指令”
案例1-如果我搜索“测试”,我只想要doc1
案例2-如果我搜索“测试dsc”,我只想要doc2。
案例3-如果我搜索“2021test desc”,我只想要doc3
但现在只有案例3起作用了
例如,CASE1不工作的.If我尝试这个查询,我有所有的3个文档
GET /myindex/_search
{
"query": {
"match" : {
"Description" : "test"
}
}
}谢谢
发布于 2021-05-31 16:48:27
在搜索中获取所有三个文档,因为在默认情况下,elasticsearch使用标准分析器作为text类型字段。这将将"2021 test desc"标记为
{
"tokens": [
{
"token": "2021",
"start_offset": 0,
"end_offset": 4,
"type": "<NUM>",
"position": 0
},
{
"token": "test",
"start_offset": 5,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "desc",
"start_offset": 10,
"end_offset": 14,
"type": "<ALPHANUM>",
"position": 2
}
]
}因此,它将返回与上述任何令牌匹配的所有文档。
如果要搜索确切的术语,则需要更新索引映射。
您可以通过用多种方式对同一字段进行索引,即使用多个字段。更新映射
PUT /_mapping
{
"properties": {
"description": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}然后再重新索引数据。之后,您将能够使用文本类型的"description“字段和关键字类型的"description.raw”进行查询。
搜索查询:
{
"query": {
"match": {
"description.raw": "test dsc"
}
}
}搜索结果:
"hits": [
{
"_index": "67777521",
"_type": "_doc",
"_id": "2",
"_score": 0.9808291,
"_source": {
"description": "test dsc"
}
}
]https://stackoverflow.com/questions/67777521
复制相似问题