簡體   English   中英

如何使用包含空格的模式突出顯示彈性搜索中的正則表達式

[英]How to highlight regexp in elasticsearch to with patterns that include spaces

我試圖在elasticsearch中使用正則表達式來查找一些模式並突出顯示它,我試圖找到包含空格的模式,確切的模式是".*( [a-zA-Z]( |,|.)){3,5}.*"查詢看起來像這樣

{
  "_source": false,
  "query": {
    "bool": {
      "should": [
        {
          "regexp": {
            "transcript_data.transcript.keyword": {
              "value": ".*( [a-zA-Z]( |,|.)){3,5}.*"
            }
          }
        }
      ]
    }
  },
  "highlight": {
    "fields": {
      "transcript_data.transcript.keyword": {}
    }
  }
}

盡管模式位於文本中間,但突出顯示似乎突出了整個文檔(從開始到結束)。

例如It's it's it's a steal. A hot eight mining and bkk t. I think these have went too It's it's it's a steal. A hot eight mining and bkk t. I think these have went too It's it's it's a steal. A hot eight mining and bkk t. I think these have went too ,輸出應該是<em>bkk t</em>我明白了...... <em>It's it's it's a steal. A hot eight mining and bkk t. I think these have went too</em> <em>It's it's it's a steal. A hot eight mining and bkk t. I think these have went too</em> <em>It's it's it's a steal. A hot eight mining and bkk t. I think these have went too</em> ,我相信這是因為.*但這似乎也是正則表達式在 ES 中的工作方式,做錯了什么?

據我所知,當正則表達式有空格時,您無法搜索text類型的字段,因為文本字段已被分析並且它被拆分為多個標記。 因此,當您在正則表達式中搜索帶有空格的文本字段時,它不會返回任何結果。

目前您正在嘗試搜索關鍵字,未分析字段的字段類型,這就是您能夠搜索它的原因。 此外,它突出顯示整個字段,因為沒有分析關鍵字字段,它將存儲整個單個值。

如果您想在其他字段上搜索並在不同字段上突出顯示,您可以使用"require_field_match": "false"突出顯示,但這在您的情況下也不起作用。

您可以嘗試使用另一個shingle ,然后嘗試在關鍵字字段上搜索並在shingle字段上突出顯示,但我不確定這是否完全適合您的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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