[英]Elastic search is not returning expected results for term query
这就是我的文章数据在弹性搜索中的显示方式
id:123,
title:xyz,
keywords:"Test Example"
id:124,
title:xyzz,
keywords:"Test Example|test1"
当在前端单击一个关键字时,例如说:“ Test Example”(测试示例),那么我应该获得包含该关键字的文章(我应该得到两篇以上的文章作为我的结果)。但是我得到的只是第一篇文章,而下面的内容是我的映射:
"keywords":
{
"type":"string",
"index":"not_analysed"
}
我怎样才能在搜索结果中获得这两篇文章?谢谢
Term Query
搜索确切字词。 这就是为什么当您搜索Test Example
您只会得到一个结果的原因,因为只有一条记录与“ Test Example
完全匹配。 如果您想同时获得两个结果,则需要使用match或query_string之类的东西。 您可以像这样使用query_string
:
{
"query": {
"query_string": {
"default_field": "keywords",
"query": "Test Example*"
}
}
}
您必须使用query_string进行查询,术语查询仅搜索确切的术语。
您将keywords
字段设置为not_analyzed
:如果希望该字段可搜索,则应删除index
子句,如下所示
"keywords": {
"type":"string"
}
无论如何,使用match
查询搜索该字段将返回包含所提供查询超集的结果:即使标签实际上是Test Example
搜索test
也会返回两个文档。
如果您可以将文档更改为这样的内容
id:123,
title:xyz,
keywords:"Test Example"
id:124,
title:xyzz,
keywords: ["Test Example", "test1"]
您可以将原始映射与"index":"not_analysed"
并且字词查询将仅返回完全包含您要查找的标签的文档。
{
"query": {
"term": {
"keywords": "test1"
}
}
}
实现相同结果的另一种方法是使用模式标记器将您的标记字符串分割为|
性格达到相同的结果
"tokenizer": {
"split_tags": {
"type": "pattern",
"group": "-1",
"pattern": "\|"
}
}
我已经与以下标记器一起使用:
"split_keywords": {
"type": "pattern",
"group": "0",
"pattern": "([^|]+)"
}
关键字将以竖线字符分割(下面是示例)
{
"tokens" : [ {
"token" : "TestExample",
"start_offset" : 0,
"end_offset" : 12,
"type" : "word",
"position" : 1
}, {
"token" : "test",
"start_offset" : 13,
"end_offset" : 17,
"type" : "word",
"position" : 2
}, {
"token" : "1",
"start_offset" : 17,
"end_offset" : 18,
"type" : "word",
"position" : 3
}, {
"token" : "test1",
"start_offset" : 13,
"end_offset" : 18,
"type" : "word",
"position" : 3
} ]
}
现在,当我搜索“ TestExample”时,我得到了以上两篇文章。 非常感谢你的帮助 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.