Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阿帕切鲁森。如何在短语查询中对单词应用通配符_Java_Apache_Lucene - Fatal编程技术网

Java 阿帕切鲁森。如何在短语查询中对单词应用通配符

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

如何在短语查询中对单词应用通配符。 我发现课堂上有多个短语,但不明白它是如何工作的)我是新手 现在我的搜索看起来像“Hi world”,应该是“Hi*world*”

公共列表搜索(字符串搜索文本){
列表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();
}