[英]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.