Обработка специальных символов с помощью lucene - PullRequest
1 голос
/ 05 ноября 2010

Я не нашел ответа на свою проблему, поэтому я решил написать свой вопрос, чтобы получить некоторую помощь.

Я использую lucene для индексации объектов в памяти компьютера (они существуют только в моем Java-коде),При обработке кода я индексирую (используя WhitespaceAnalyzer) поле со значением objA/4.

Моя проблема начинается, когда я хочу найти ее после индексации (также используя WhitespaceAnalyzer).

Когда я создаю запрос obj*, я нахожу все объекты, которые начинаются с obj - если я создаю запрос objA/4, я также могу найти этот объект.

Однако я не знаю, как найти все объекты, начиная с objA/, когда я создаю запрос, objA/* lucene меняет его на obja/* и ничего не находит.

Я проверил, и "/" не является специальным символом, поэтому мне не нужно ставить перед ним "\".

Итак, мой вопрос, как попросить получить все объекты, которые начинаются с objA/ (например - objA/0, objA/1, objA/2, objA/3)?

Ответы [ 2 ]

1 голос
/ 05 ноября 2010

Используете ли вы QueryParser.escape(String), чтобы избежать всего правильно?

0 голосов
/ 05 ноября 2010

Код, который я использую:

String node = "objA/*";   

 Query node_query = MultiFieldQueryParser.parse(node, "nodeName", new WhitespaceAnalyzer());

 BooleanQuery bq = new BooleanQuery();  

 bq.add(node_query, BooleanClause.Occur.MUST);

 System.out.println("We're asking for - " + bq);  

 IndexSearcher looker = new IndexSearcher(rep_index);

 Hits hits = looker.search(bq);
...