Java 阿帕切鲁森。如何在短语查询中对单词应用通配符
如何在短语查询中对单词应用通配符。 我发现课堂上有多个短语,但不明白它是如何工作的)我是新手 现在我的搜索看起来像“Hi world”,应该是“Hi*world*”Java 阿帕切鲁森。如何在短语查询中对单词应用通配符,java,apache,lucene,Java,Apache,Lucene,如何在短语查询中对单词应用通配符。 我发现课堂上有多个短语,但不明白它是如何工作的)我是新手 现在我的搜索看起来像“Hi world”,应该是“Hi*world*” 公共列表搜索(字符串搜索文本){ 列表ID=新的ArrayList(); 字符串indexDir=“index”; IndexReader=null; 试一试{ Directory=FSDirectory.open(path.get(indexDir)); reader=DirectoryReader.open(目录); }捕获(I
公共列表搜索(字符串搜索文本){
列表ID=新的ArrayList();
字符串indexDir=“index”;
IndexReader=null;
试一试{
Directory=FSDirectory.open(path.get(indexDir));
reader=DirectoryReader.open(目录);
}捕获(IOE异常){
e、 toString();
}
IndexSearcher search=新的IndexSearcher(阅读器);
StandardAnalyzer StandardAnalyzer=新的StandardAnalyzer();
PhraseQuery.Builder PhraseQuery=新建PhraseQuery.Builder();
String[]words=searchText.split(“”);
for(字符串字:字){
add(新术语(“内容”,单词));
}
PhraseQuery pq=PhraseQuery.build();
试一试{
TopDocs结果=searcher.search(pq,100);
ScoreDoc[]ScoreDoc=results.scoreDocs;
对于(int i=0;i
谢谢我做到了
…下面的代码搜索“一*”或“一*二*”之类的内容
TopDocs结果=null;
试一试{
String[]words=searchText.split(“”);
int count=words.length;
如果(计数=1){
PrefixQuery查询=新的PrefixQuery(新术语(“内容”,搜索文本));
结果=searcher.search(查询,100);
}否则,如果(计数>1){
SpanQuery[]sq=新span查询[计数];
for(inti=0;words.length-1>=i;i++){
sq[i]=新的跨距MultitermQueryRapper(新的前缀查询(新的
术语(“内容”,词语[i]);
}
扳手查询=新的扳手查询(sq,0,true);
结果=searcher.search(查询,100);
}
ScoreDoc[]ScoreDoc=results.scoreDocs;
对于(int i=0;i
public List<Long> search(String searchText){
List<Long> ids = new ArrayList<>();
String indexDir = "index";
IndexReader reader = null;
try {
Directory directory = FSDirectory.open(Paths.get(indexDir));
reader = DirectoryReader.open(directory);
} catch (IOException e){
e.toString();
}
IndexSearcher searcher = new IndexSearcher(reader);
StandardAnalyzer standardAnalyzer = new StandardAnalyzer();
PhraseQuery.Builder phraseQuery = new PhraseQuery.Builder();
String[] words = searchText.split(" ");
for (String word: words) {
phraseQuery.add(new Term("content", word));
}
PhraseQuery pq = phraseQuery.build();
try {
TopDocs results = searcher.search(pq, 100);
ScoreDoc[] scoreDoc = results.scoreDocs;
for (int i = 0; i < scoreDoc.length; i++ ) {
Document hitDoc = searcher.doc(scoreDoc[i].doc);
ids.add(Long.parseLong(hitDoc.get("documentId")));
}
} catch (ParseException | IOException e){
e.toString();
}
return ids;
}
TopDocs results = null;
try{
String[] words = searchText.split(" ");
int count = words.length;
if (count == 1) {
PrefixQuery query = new PrefixQuery(new Term("content", searchText));
results = searcher.search(query, 100);
} else if (count > 1) {
SpanQuery[] sq = new SpanQuery[count];
for (int i = 0; words.length - 1 >= i; i++) {
sq[i] = new SpanMultiTermQueryWrapper<PrefixQuery>(new PrefixQuery(new
Term("content", words[i])));
}
SpanNearQuery query = new SpanNearQuery(sq, 0, true);
results = searcher.search(query, 100);
}
ScoreDoc[] scoreDoc = results.scoreDocs;
for (int i = 0; i < scoreDoc.length; i++ ) {
Document hitDoc = searcher.doc(scoreDoc[i].doc);
ids.add(Long.parseLong(hitDoc.get("documentId")));
}
} catch (IOException e){
e.toString();
}