Karakter khusus mana yang perlu di-escape dalam kueri solr?

Pembaruan: Saya berpikir pertanyaan ini ada hubungannya dengan sintaks solr secara umum, dan bukan Chef pada khususnya. Jadi ketika saya mengalami hal ini saat bekerja dengan Chef, saya berasumsi bahwa siapa pun yang bekerja dengan Solr juga akan mengalami hal ini...


Saya sedang mengerjakan aplikasi yang berkomunikasi dengan API pencarian server Chef untuk menemukan node tertentu.

Berdasarkan http://docs.opscode.com/essentials_search.html#special-characters ini, sepertinya sejumlah karakter khusus perlu di-escape.

Catatan: Saya hanya peduli dengan pola pencocokan tepat, bukan karakter pengganti. Saya menyadari bahwa alasan beberapa karakter ini adalah wildcard.

Berikut daftarnya pada saat artikel ini ditulis, seperti yang disalin dari URL di atas:

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

Namun, ketika saya mencoba berbagai perintah knife search dengan karakter ini, saya melihat perilaku yang tidak konsisten.

Untuk contoh berikut, saya menyiapkan node yang diberi tag +&|!(){}[]^\"~*?:\\"

Perintah ini dijalankan dari kotak Linux, di bash shell:

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

Itu berjalan seperti yang diharapkan, karena tidak ada yang lolos. Sekarang, saya menghindari semuanya dengan satu \ seperti yang disarankan dokumen:

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

Aneh.

Adakah yang bisa menjelaskan hal ini, dan mungkin menyarankan kueri yang mampu mencocokkan tag tersebut?

Jelas tidak mungkin ada orang yang memiliki atribut yang berisi semua karakter khusus tersebut, tetapi saya ingin memahami lebih baik bagaimana karakter khusus harus di-escape.

Terima kasih!


person hairyhenderson    schedule 20.02.2014    source sumber
comment
Mungkin Anda menemukan informasi lebih lanjut saat mencari yang sama tetapi untuk solr daripada chef..? Itu yang digunakan untuk pencarian.   -  person StephenKing    schedule 20.02.2014
comment
! ( ) { } [ ] ^ " ~ * ? : \ Semuanya berhasil untuk saya tetapi + - && | | semuanya gagal   -  person Display Name is missing    schedule 21.02.2014
comment
@better_use_mkstemp: terima kasih. Itu sebagian membantu. Saya juga sedikit bingung kenapa && dan || dianggap karakter khusus.   -  person hairyhenderson    schedule 21.02.2014
comment
Setelah membaca URL yang diposting oleh @sethvargo di bawah ini, sekarang saya mengerti mengapa +, -, &&, dan || ditafsirkan secara khusus. Mereka dianggap sebagai operator boolean. Namun masih belum jelas bagaimana cara menghindarinya dengan benar.   -  person hairyhenderson    schedule 21.02.2014


Jawaban (2)


Anda perlu menggunakan sintaks lucene solr untuk regex: 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
terima kasih. Sepertinya dokumen Chef hanya menyalin dokumen Lucene di URL ini: lucene.apache .org/core/2_9_4/queryparsersyntax.html#Escaping Karakter Khusus, yang tidak lagi membantu... - person hairyhenderson; 21.02.2014