2012-04-26 14 views
5

"state: OR" sorgusunda geçtiğimde lucene, "OR" ifadesini boolean ifadesi için anahtar sözcüğü olarak kabul ettiğinden dolayı bir hata verdi, ancak burada aslında Oregon eyaletinin kısaltmasını yapıyorum.Nasıl lucene sorguda VE ve AND kaçmak için nasıl?

OR'den alıntı yapıldığını, dolayısıyla sorgunun "durum" durumuna geldiğini gördüm. OR "', onu çalıştırıyor.

ama bu çok iyi bir yaklaşım gibi gelmiyor, çünkü lucene'nin kullandığı anahtar kelimelerin her biri için bir dizi ikamesi yapmam gerekecek: AND OR NOT ve diğerleri? Ben çok fazla

Sorguyu doğrudan sorguParser.parse() yapmak yerine yapılandırmayı denedim, ancak bunun analizcilerden geçmediği anlaşılıyor, bu büyük bir sorun.

+0

Sorguyu manuel olarak oluşturmadan önce terimi analiz edebilirsiniz – jpountz

cevap

3

Lucene query syntax - AND, OR ve NOT konumunda yalnızca 3 bağımsız anahtar sözcük var. ("TO" da kullanılır, ancak yalnızca bir aralık sorgusunun içinde tanınır.)

Teklif kodunuzun, uygulamanızda yalnızca terim olarak kullanılan Lucene anahtar sözcüklerini ("OR" gibi) tanıması yeterli olabilir. Yukarıdaki örnekte).

4

bu kaçış yolları vardır, süpürge kaçmak etmektir AND, OR, & DEĞİL ile lider tersbölüler örn:

\\AND \\OR \\NOT

dönüşümlü kod çözümleyici kendi küçük eşdeğerleri ayrıştırmak olmaz operatörler olarak

+0

Bu yüzden böyle bir şey yapıyordum searchTerm.replaceAll ("\\ b (AND | OR | NOT) \\ b", "\\\\\ \\\ $ 1 ");' bir literalden kaçmak ve sonuçta bir solr sorgusunda biten kullanıcı tarafından girilen bir arama kutusunda kullanılır - w Ben bulduğum şapka, AND 'den öncelenerek \\ çalışarak artık ayrıştırma istisnasının olmadığı, ancak aslında harf dizisini aramıyordu. Solr konuşmasında, bir sorgudaki 'name: \\ AND 'parametresi," Jim ve john "adıyla girişleri döndürmesi gerektiğinde herhangi bir sonuç bulamaz. En küçük durumda, en azından solda gitmenin yolu olabilir! – icyitscold

İlgili konular