2010-11-30 4 views
0

Привет: У меня есть два документа:поле крест поиска в Lucene

title      body 
Lucene In Action   A high-performance, full-featured text search engine library. 
Lucene Practice    Use lucene in your application 

Теперь я ищу "производительность Lucene" с помощью

private String[] f = { "title", "body"}; 
private Occur[] should = { Occur.SHOULD, Occur.SHOULD}; 
Query q = MultiFieldQueryParser.parse(Version.LUCENE_29, "lucene performance", f, should,new IKAnalyzer()); 

Тогда я получаю два удара: «Lucene в действии »и« Практика Люцен ».

Однако я не хочу, чтобы в результате поиска была использована «Практика Луцен».

То есть, я просто хочу, чтобы документы, которые владеют всеми моими поисковыми запросами, могут быть возвращены, «lucene parctice» не содержит термин «производительность», поэтому его не следует возвращать.

Любые идеи?

ответ

2

Lucene не может совпадать по полю. То есть для запроса "a b" он не будет соответствовать "a" в title и "b" в body. Для этого вам нужно создать другое поле, скажем, all_text, которое имеет название и тело, индексированные.

Кроме того, если вы ищете "lucene performance" Я полагаю, что вы ищете документы, которые имеют как термины - lucene, так и performance. По умолчанию логический оператор равен OR. Вы должны указать оператор по умолчанию как AND, чтобы соответствовать всем условиям запроса. (В противном случае в этом случае запрос «lucene performance» начнет возвращать совпадения, говорящие о производительности базы данных.)

+0

Для поиска английских символов вы правы. И я ищу некоторые способы, чтобы решить китайские персонажи, сержанты. В любом случае, спасибо. – hguser 2010-11-30 13:17:02