Lucene 4.5。在StringField中搜索多术语查询

Lucene 4.5。在StringField中搜索多术语查询,lucene,Lucene,我正在尝试查询一个StringField,以查找使用Lucene 4.5创建的索引,该索引包含一个由多个术语组成的字符串 假设我们使用以下代码段/伪代码创建一个文档对象 Directory dir=FSDirectory.open(新文件(indexPath)); Analyzer Analyzer=新的英语Analyzer(版本:LUCENE_45); IndexWriterConfig iwc=新的IndexWriterConfig(Version.LUCENE_45,analyzer);

我正在尝试查询一个StringField,以查找使用Lucene 4.5创建的索引,该索引包含一个由多个术语组成的字符串

假设我们使用以下代码段/伪代码创建一个文档对象

Directory dir=FSDirectory.open(新文件(indexPath));
Analyzer Analyzer=新的英语Analyzer(版本:LUCENE_45);
IndexWriterConfig iwc=新的IndexWriterConfig(Version.LUCENE_45,analyzer);
iwc.setOpenMode(OpenMode.CREATE);
IndexWriter writer=(国际捕鲸委员会主任);
单据单据=新单据();
字段标题=新的字符串字段(“标题”,minQuery,Field.Store.YES);
添加文件(标题);
writer.addDocument(doc);
现在,假设我使用以下查询代码查询上述创建索引(同样,这只是我正在使用的实际代码的草图):

IndexReader=DirectoryReader.open(FSDirectory.open(新文件(indexPath));
BM25Similarity bm25sim=新的BM25Similarity();
IndexSearcher search=新的IndexSearcher(阅读器);
搜索者设置相似性(bm25sim);
Analyzer Analyzer=新的英语Analyzer(版本:LUCENE_45);
QueryParser parser=新的QueryParser(Version.LUCENE_45,“Content”,analyzer);
Query=parser.parse(“标题:\'washington dc\”);
TopDocs结果=searcher.search(查询,1);
当我运行上面的代码时,在searcher.search(query,1)语句的对应关系中出现了以下异常:

线程“main”java.lang.IllegalStateException中的异常:字段“Title”为
无位置数据的索引;无法运行短语查询(term=washington)
我环顾四周,找不到解决这个问题的方法。看起来在Lucene的过去版本中,您可以将Field.Index.analysed选项添加到字段创建中,但在我的例子中,我还不能这样做


有什么想法吗?

您的查询将作为全文进行分析,而不是作为一个原子字符串进行分析。为了让查询解析器有效地决定对不同字段使用适当的分析器,您可以使用,
KeywordAnalyzer
是应用于
StringField
的适当分析器

Map analyzerMap=newhashmap();
analyzerPerField.put(“Title”,新关键字analyzer());
PerfielDanalyzerRapper分析仪=
新的PerfielDanalyzerRapper(新的英国分析程序(LUCENE_45版),analyzerMap);
QueryParser parser=新的QueryParser(Version.LUCENE_45,“Content”,analyzer);