Java Lucene查询与内容中的正则表达式字符不匹配
下面是我为匹配lucene索引内容而编写的代码片段。这段代码适用于术语“loop_2;”的查询,但不适用于术语“loop*”的查询。详情如下 我正在努力想办法让它发挥作用:Java Lucene查询与内容中的正则表达式字符不匹配,java,lucene,Java,Lucene,下面是我为匹配lucene索引内容而编写的代码片段。这段代码适用于术语“loop_2;”的查询,但不适用于术语“loop*”的查询。详情如下 我正在努力想办法让它发挥作用: public class TryLuceneQuery { public static void main(String[] args) { try { Version v = Version.LUCENE_48; Analyzer analyzer = new Standa
public class TryLuceneQuery {
public static void main(String[] args) {
try {
Version v = Version.LUCENE_48;
Analyzer analyzer = new StandardAnalyzer(v);
Directory fsDir = FSDirectory.open(new File("C:\\data\\index"));
IndexReader reader = IndexReader.open(fsDir);
System.out.println("The index has " + reader.maxDoc() + " documents.");
for(int i=0;i<reader.maxDoc();i++) {
Document d = reader.document(i);
System.out.println(d.get("csv"));
}
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser
= new QueryParser("csv",analyzer);
Query finalQuery = new TermQuery(new Term("csv","loop_"));
TopDocs hits = searcher.search(finalQuery,500);
System.out.println(hits.totalHits + " documents found.");
ScoreDoc[] scoreDocs = hits.scoreDocs;
for (int n = 0; n < scoreDocs.length; ++n) {
ScoreDoc sd = scoreDocs[n];
float score = sd.score;
int docId = sd.doc;
Document d = searcher.doc(docId);
String code = d.get("csv");
System.out.println(code);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
及
我应该如何查询以匹配“loop*”?谢谢。您的问题是分析仪<代码>标准分析器尝试从全文内容中创建有意义的单词。通常,标点符号被视为单词之间的分隔符,并从索引中的术语中删除。“loop_”之所以有效,是因为下划线的处理方式有时与大多数其他标点符号不同(例如,当在数字中找到句点和逗号时,请参见) 因此,当您使用StandardAnalyzer为这些字段编制索引时,您会得到以下标记:
- 循环'loop','loop','loop','loop'
- loop_uuo
“循环”、“循环”、“循环”、“循环”
TermQuery
不受分析器的约束,因此它正在寻找一个文本术语“loop*”,它在索引中根本不存在
听起来你想要的是简单地在空格处分解术语。要做到这一点,您只需使用,并重新索引您的文档
那么你应该看到:
新术语查询(新术语(“csv”、“循环”)代码>=>1个文档
新术语查询(新术语(“csv”、“循环*”))代码>=>1个文档
新术语查询(新术语(“csv”、“循环”)代码>=>0个文档李>
Query finalQuery = new TermQuery(new Term("csv","loop*"));
Query finalQuery = new TermQuery(new Term("csv","loop\\*"));