我在正確表達ElasticSearch正則表達式篩選器的正則表達式時出現問題。我試圖在網址字段中的「info-for/media」中匹配任何內容,例如http://mydomain.co.uk/info-for/media/press-release-1。要嘗試獲得正確的正則表達式,我現在使用的是match_all
,但最終將使用用戶的查詢字符串match_phrase
。ElasticSearch正則表達式篩選器
POST爲localhost:9200/_search
{
"query" : {
"match_all" : { },
"filtered" : {
"filter" : {
"regexp": {
"url":".*info-for/media.*"
}
}
}
},
}
這將返回0命中,但正確地解析。 .*info.*
確實會得到包含該網址的結果,但不幸的是該網址過於寬泛,例如匹配包含「信息」的任何網址。只要我在「info-for」中添加連字符,我就會再次得到0個結果。無論我嘗試使用哪種轉義字符組合,我都會得到解析異常,或者無法匹配。任何人都可以幫助解釋我做錯了什麼?
一個更簡單的選項是將此字段映射爲未分析版本的多字段,並在未分析字段上運行regexp過濾器。一般來說,正則表達式過濾器在非分析字段上更有意義。 –
這仍然是一個非常昂貴的查詢來執行。 –
謝謝@AlexBrasetvik我在將映射/分析器配置的JSON版本發佈到我的索引_settings端點時遇到了一些困難。它無法找到我聲明的分析器。如果你有它,示例JSON會非常有幫助,謝謝。 – idlemind