簡體   English   中英

關鍵字(OR,AND)在Lucene搜索

[英]Keyword (OR, AND) search in Lucene

我在我的門戶網站(基於J2EE)中使用Lucene進行索引和搜索服務。

問題是關於Lucene的關鍵字。 當您在搜索查詢中使用其中一個時,您將收到錯誤。

例如:

searchTerms = "ik OR jij"

這很好,因為它會搜索"ik""jij"

searchTerms = "ik AND jij"

這很好,它搜索"ik""jij"

但是當你搜索:

searchTerms = "OR"
searchTerms = "AND"
searchTerms = "ik OR"
searchTerms = "OR ik"

等等,它將失敗並出現錯誤:

Component Name: STSE_RESULTS  Class: org.apache.lucene.queryParser.ParseException  Message: Cannot parse 'OR jij': Encountered "OR" at line 1, column 0. 
Was expecting one of: 
...

這是有道理的,因為這些詞是Lucene的關鍵詞可能是保留的,並將作為關鍵詞。

在荷蘭語中,“OR”這個詞很重要,因為它對“Ondernemings Raad”有意義。 它被用在許多文本中,需要找到它。 例如,“或”確實有效,但不返回與術語“OR”匹配的文本。 我怎樣才能讓它可以搜索?

如何逃避關鍵字“或”? 或者,我如何告訴Lucene將“或”視為搜索詞而不是關鍵詞。

我想你已經嘗試將“OR”放入雙引號中?

如果這不起作用,我認為你可能不得不改變Lucene源,然后重新編譯整個事情,因為操作符“OR”深埋在代碼中。 實際上,編譯可能還不夠:你必須更改源包中的文件QueryParser.jj作為JavaCC的輸入,然后運行JavaCC,然后重新編譯整個事情。

然而,好消息是,只有一條線可以改變:

| <OR: ("OR" | "||") >

| <OR: ("||") >

這樣,你只有“||” 作為邏輯OR運算符。 有一個build.xml也包含JavaCC的調用,但您必須自己下載該工具 我現在不能自己嘗試,我很害怕。

對於Lucene開發人員郵件列表來說這可能是一個很好的問題,但如果你這樣做,請告訴我們,他們會提出一個更簡單的解決方案;-)

使用雙引號轉義OR和AND對我有用。 所以嘗試使用Java字符串

String query = "field:\\"AND\\"";

ORNOTAND是保留關鍵字。 我在2天前解決了這個問題,在將其輸入到lucene查詢解析器之前,將用戶搜索詞中的3個單詞置低。 請注意,如果您搜索並替換這些關鍵字,請確保使用單詞邊界(\\ b),這樣您就不會更改ANDROID和ORDER等單詞。

然后我讓用戶通過使用 - 和+來指定NOTAND ,就像Google一樣。

我多次看過你的問題了! = [

請看看這些建議

你的索引是如何存儲的?

包含存儲的字段的文檔可以存儲為

1)存儲2)標記3)索引4)向量

它可以使一個顯著差異

請使用Luke ,它可以告訴你如何存儲索引(實際上)

如果你正在使用lucene,那么Luke是必須的 ,因為它讓你真正了解索引的存儲方式,它還提供搜索,嘗試讓我們知道你的更新!

在構建查詢時,您可能做錯了什么。 我將第二個Narayan關於獲取Luke的建議(如評論中所述)並嘗試運行您的查詢。 自從我使用Lucene以來已經有一段時間了,但是我不記得曾經有OR和AND的問題。

除此之外,您可以嘗試使用QueryParser.escape(userQuery)轉義輸入字符串

更多關於逃離

您可以在搜索詞時轉義“OR”,或者為不同的語法編寫自己的查詢解析器。 除了解析器之外,Lucene還提供了廣泛的查詢API,您可以非常輕松地使用它來支持自己的查詢語法。

暫無
暫無

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

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