簡體   English   中英

彈性搜索未返回術語查詢的預期結果

[英]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完全匹配。 如果您想同時獲得兩個結果,則需要使用matchquery_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM