阻止KeywordTokenizer创建多个键值对

时间:2010-01-15 22:38:07

标签: lucene

我将Lucene java QueryParserKeywordAnalyzer一起使用。类似topic:(hello world)的查询被KeywordTokenizer分解为多个部分,因此生成的Query对象看起来像这个topic:(hello) topic:(world),即我现在有两个键值对而不是一个。我希望QueryParserhello world解释为一个值,而不使用双引号。这样做的最佳方式是什么?

解析topic:("hello world")会产生单个键值组合,但使用双引号不是一种选择。

我没有使用Lucene搜索引擎。我正在使用Lucene的QueryParser来解析查询而不是搜索。文本Hello World在运行时由用户输入,以便可以更改。我希望KeywordTokenizerHello World视为一个令牌而不是将其拆分为两个令牌。

2 个答案:

答案 0 :(得分:0)

您需要使用BooleanQuery。这是使用Lucene的.NET端口的代码片段。这应该适用于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);

答案 1 :(得分:0)

您可以直接构建查询,如下所示。这保留了空间。

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

如果您将查询打印为System.out.println(query);,您将看到以下结果。

field:value has space