อักขระพิเศษใดที่ต้องหลบหนีในการสืบค้น solr

อัปเดต: ฉัน คิดว่า คำถามนี้เกี่ยวข้องกับไวยากรณ์ของ solr โดยทั่วไป และไม่ใช่ Chef โดยเฉพาะ ดังนั้นในขณะที่ฉันพบกับการทำงานร่วมกับ Chef ฉันคิดว่าใครก็ตามที่ทำงานกับ Solr จะต้องประสบกับสิ่งนี้เช่นกัน...


ฉันกำลังทำงานกับแอปพลิเคชันที่สื่อสารกับ API การค้นหาของเซิร์ฟเวอร์ Chef เพื่อค้นหาโหนดเฉพาะ

จาก http://docs.opscode.com/essentials_search.html#special-Characters นี้ ดูเหมือนว่าจะต้องหลีกเลี่ยงอักขระพิเศษจำนวนหนึ่ง

หมายเหตุ: ฉันกังวลเฉพาะกับรูปแบบการจับคู่แบบตรงทั้งหมด ไม่ใช่ ไวด์การ์ด ฉันรู้ว่าสาเหตุที่อักขระเหล่านี้บางตัวเป็นไวด์การ์ด

ต่อไปนี้เป็นรายการในขณะที่เขียนนี้ โดยคัดลอกมาจาก URL ด้านบน:

+  -  &&  | |  !  ( )  { }  [ ]  ^  "  ~  *  ?  :  \

เมื่อฉันลองใช้คำสั่ง knife search ต่างๆ กับอักขระเหล่านี้ ฉันเห็นพฤติกรรมที่ไม่สอดคล้องกัน

สำหรับตัวอย่างต่อไปนี้ ฉันตั้งค่าโหนดที่แท็กด้วย +&|!(){}[]^\"~*?:\\"

คำสั่งเหล่านี้ถูกเรียกใช้จากกล่อง Linux ใน bash shell:

$ knife search node 'tags:+&|!(){}[]^"~*?:\'
ERROR: knife search failed: invalid search query: 'tags:+&|!(){}[]^"~*?:\'

ซึ่งเป็นไปตามที่คาดไว้ เนื่องจากไม่มีอะไรรอดพ้นไปได้ ตอนนี้ ฉันหลีกหนีทุกสิ่งด้วย \ เดียวตามที่เอกสารแนะนำ:

$ knife search node 'tags:\+\&\|\!\(\)\{\}\[\]\^\"\~\*\?\:\\'
ERROR: knife search failed: invalid search query: 'tags:\+\&\|\!\(\)\{\}\[\]\^\"\~\*\?\:\\'

แปลก.

ใครช่วยอธิบายเรื่องนี้ได้บ้าง และอาจแนะนำข้อความค้นหาที่สามารถจับคู่แท็กนั้นได้

ไม่น่าเป็นไปได้ที่ทุกคนจะมีแอตทริบิวต์ที่มีอักขระพิเศษเหล่านั้นทั้งหมด แต่ฉันอยากจะเข้าใจให้ดีขึ้นว่าควรหลีกเลี่ยงอักขระพิเศษอย่างไร

ขอบคุณ!


person hairyhenderson    schedule 20.02.2014    source แหล่งที่มา
comment
บางทีคุณอาจพบข้อมูลเพิ่มเติมเมื่อค้นหาสิ่งเดียวกัน แต่สำหรับ solr แทนที่จะเป็นเชฟ .. ? นั่นคือสิ่งที่ใช้ในการค้นหา   -  person StephenKing    schedule 20.02.2014
comment
! ( ) { } [ ] ^ " ~ * ? : \ ทั้งหมดนี้ใช้ได้ผลสำหรับฉัน แต่ + - && | | ทั้งหมดล้มเหลว   -  person Display Name is missing    schedule 21.02.2014
comment
@better_use_mkstemp: ขอบคุณ นั่นก็ช่วยได้บางส่วน ฉันยังสับสนเล็กน้อยว่าทำไม && และ || จึงถือเป็นอักขระพิเศษ   -  person hairyhenderson    schedule 21.02.2014
comment
หลังจากอ่าน URL ที่โพสต์โดย @sethvargo ด้านล่าง ตอนนี้ฉันเข้าใจแล้วว่าทำไม +, -, &&, และ || มีการตีความเป็นพิเศษ พวกมันถูกพิจารณาว่าเป็นตัวดำเนินการบูลีน อย่างไรก็ตาม ยังไม่ชัดเจนว่าจะหลีกเลี่ยงสิ่งเหล่านี้ได้อย่างไร   -  person hairyhenderson    schedule 21.02.2014


คำตอบ (2)


คุณต้องใช้ไวยากรณ์ lucene solr สำหรับ regexes: http://lucene.apache.org/core/6_5_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Escaping_Special_Characters

person sethvargo    schedule 20.02.2014
comment
ขอบคุณ. ดูเหมือนว่าเอกสาร Chef เพียงคัดลอกเอกสาร Lucene ที่ URL นี้: lucene.apache .org/core/2_9_4/queryparsersyntax.html#Escaping Special Character ซึ่งไม่มีประโยชน์อีกต่อไป... - person hairyhenderson; 21.02.2014

อาจเป็นความคิดที่ดีที่จะดู http://lucene.apache.org/solr/4_2_1/solr-solrj/org/apache/solr/client/solrj/util/ClientUtils.html#escapeQueryChars(java).lang.String)

person Anatoli Radoulov    schedule 28.04.2016