Запретить KeywordTokenizer создавать несколько пар ключ-значение - PullRequest
1 голос
/ 16 января 2010

Я использую Lucene Java QueryParser с KeywordAnalyzer.Запрос topic:(hello world) разбивается на несколько частей KeywordTokenizer, поэтому результирующий объект Query выглядит следующим образом topic:(hello) topic:(world), т. Е. Вместо одной теперь у меня есть две пары ключ-значение.Я бы хотел, чтобы QueryParser интерпретировал hello world как одно значение без использования двойных кавычек.Каков наилучший способ сделать это?

Синтаксический анализ topic:("hello world") приводит к комбинации одного значения ключа, но использование двойных кавычек не вариант.

Я не использую поисковую систему Lucene,Я использую QueryParser Lucene только для анализа запроса, а не для поиска.Текст Hello World вводится пользователем во время выполнения, чтобы его можно было изменить.Я бы хотел, чтобы KeywordTokenizer рассматривал Hello World как один токен, вместо того, чтобы разбивать его на два токена.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2010

Вы можете построить запрос напрямую следующим образом. Это сохраняет пространство.

Query query = new TermQuery(new Term("field", "value has space"));

Если вы напечатаете запрос как System.out.println(query);, вы увидите следующий результат.

field:value has space
0 голосов
/ 16 января 2010

Вам нужно будет использовать BooleanQuery .Вот фрагмент кода с использованием .NET-порта Lucene.Это должно работать как с KeywordAnalyzer, так и с StandardAnalyzer.

var luceneAnalyzer = new KeywordAnalyzer();

var query1 = new QueryParser("Topic", luceneAnalyzer).Parse("hello");
var query2 = new QueryParser("Topic", luceneAnalyzer).Parse("world");

BooleanQuery filterQuery = new BooleanQuery();
filterQuery.Add(query1, BooleanClause.Occur.MUST);
filterQuery.Add(query1, BooleanClause.Occur.MUST);

TopDocs results = searcher.Search(filterQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...