• <small id='aHUAg'></small><noframes id='aHUAg'>

        • <bdo id='aHUAg'></bdo><ul id='aHUAg'></ul>
        <tfoot id='aHUAg'></tfoot>

        <i id='aHUAg'><tr id='aHUAg'><dt id='aHUAg'><q id='aHUAg'><span id='aHUAg'><b id='aHUAg'><form id='aHUAg'><ins id='aHUAg'></ins><ul id='aHUAg'></ul><sub id='aHUAg'></sub></form><legend id='aHUAg'></legend><bdo id='aHUAg'><pre id='aHUAg'><center id='aHUAg'></center></pre></bdo></b><th id='aHUAg'></th></span></q></dt></tr></i><div id='aHUAg'><tfoot id='aHUAg'></tfoot><dl id='aHUAg'><fieldset id='aHUAg'></fieldset></dl></div>

      1. <legend id='aHUAg'><style id='aHUAg'><dir id='aHUAg'><q id='aHUAg'></q></dir></style></legend>

        使用 Lucene 的精确短语搜索?

        时间:2023-09-30

          <bdo id='H095m'></bdo><ul id='H095m'></ul>
              • <legend id='H095m'><style id='H095m'><dir id='H095m'><q id='H095m'></q></dir></style></legend>
              • <i id='H095m'><tr id='H095m'><dt id='H095m'><q id='H095m'><span id='H095m'><b id='H095m'><form id='H095m'><ins id='H095m'></ins><ul id='H095m'></ul><sub id='H095m'></sub></form><legend id='H095m'></legend><bdo id='H095m'><pre id='H095m'><center id='H095m'></center></pre></bdo></b><th id='H095m'></th></span></q></dt></tr></i><div id='H095m'><tfoot id='H095m'></tfoot><dl id='H095m'><fieldset id='H095m'></fieldset></dl></div>
                  <tbody id='H095m'></tbody>

                  <small id='H095m'></small><noframes id='H095m'>

                  <tfoot id='H095m'></tfoot>

                  本文介绍了使用 Lucene 的精确短语搜索?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我正在使用 SpanTerm Query 在 lucene 中搜索确切的短语.但它似乎不起作用.这是我的代码.

                  I am using SpanTerm Query for searching exact phrase in lucene. But it doesnt seem to work. Here is my code.

                  索引

                  IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), false,IndexWriter.MaxFieldLength.UNLIMITED);  
                  doc.add(new Field("contents", sb.toString(), Field.Store.YES, Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
                  doc.add(new Field("imageid", imageDocument.getImageId(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                  doc.add(new Field("title", imageDocument.getTitle(), Field.Store.YES, Field.Index.ANALYZED));
                  doc.add(new Field("country", imageDocument.getCountry(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                  write.addDocument(doc);
                  

                  搜索

                  String sentence = searchParameters.get("searchExactWord");
                  String[] words = sentence.split(" ");
                  String queryNoWord = "";
                  int i = 0;
                  SpanTermQuery [] clause = new SpanTermQuery[words.length];
                  for (String word : words)
                  {
                      clause[i] = new SpanTermQuery(new Term("contents",word));
                      i++;
                  }
                  SpanNearQuery query = new SpanNearQuery(clause, 0, true);
                  booleanQuery.add(query, BooleanClause.Occur.MUST);
                  

                  如果我做错了请指导我???

                  Please guide me if I am doing it wrong???

                  普拉提克

                  推荐答案

                  试试 PhraseQuery 改为:

                  Try a PhraseQuery instead:

                  PhraseQuery query = new PhraseQuery();
                  String[] words = sentence.split(" ");
                  for (String word : words) {
                      query.add(new Term("contents", word));
                  }
                  booleanQuery.add(query, BooleanClause.Occur.MUST);
                  

                  我认为你有一个不同的问题.booleanQuery 还有哪些其他部分?这是搜索短语的完整工作示例:

                  I think you have a different problem. What other parts are there to your booleanQuery? Here's a full working example of searching for a phrase:

                  public class LucenePhraseQuery {
                      public static void main(String[] args) throws Exception {
                          // setup Lucene to use an in-memory index
                          Directory directory = new RAMDirectory();
                          Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
                          MaxFieldLength mlf = MaxFieldLength.UNLIMITED;
                          IndexWriter writer = new IndexWriter(directory, analyzer, true, mlf);
                  
                          // index a few documents
                          writer.addDocument(createDocument("1", "foo bar baz"));
                          writer.addDocument(createDocument("2", "red green blue"));
                          writer.addDocument(createDocument("3", "test foo bar test"));
                          writer.close();
                  
                          // search for documents that have "foo bar" in them
                          String sentence = "foo bar";
                          IndexSearcher searcher = new IndexSearcher(directory);
                          PhraseQuery query = new PhraseQuery();
                          String[] words = sentence.split(" ");
                          for (String word : words) {
                              query.add(new Term("contents", word));
                          }
                  
                          // display search results
                          TopDocs topDocs = searcher.search(query, 10);
                          for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
                              Document doc = searcher.doc(scoreDoc.doc);
                              System.out.println(doc);
                          }
                      }
                  
                      private static Document createDocument(String id, String content) {
                          Document doc = new Document();
                          doc.add(new Field("id", id, Store.YES, Index.NOT_ANALYZED));
                          doc.add(new Field("contents", content, Store.YES, Index.ANALYZED,
                                  Field.TermVector.WITH_POSITIONS_OFFSETS));
                          return doc;
                      }
                  }
                  

                  这篇关于使用 Lucene 的精确短语搜索?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何正确地将 MouseHandler 添加到我的 JFreeChart-FX 下一篇:使用 Lucene 提取英语单词

                  相关文章

                  最新文章

                  • <bdo id='grCjR'></bdo><ul id='grCjR'></ul>

                1. <legend id='grCjR'><style id='grCjR'><dir id='grCjR'><q id='grCjR'></q></dir></style></legend>
                    <i id='grCjR'><tr id='grCjR'><dt id='grCjR'><q id='grCjR'><span id='grCjR'><b id='grCjR'><form id='grCjR'><ins id='grCjR'></ins><ul id='grCjR'></ul><sub id='grCjR'></sub></form><legend id='grCjR'></legend><bdo id='grCjR'><pre id='grCjR'><center id='grCjR'></center></pre></bdo></b><th id='grCjR'></th></span></q></dt></tr></i><div id='grCjR'><tfoot id='grCjR'></tfoot><dl id='grCjR'><fieldset id='grCjR'></fieldset></dl></div>
                    <tfoot id='grCjR'></tfoot>

                    <small id='grCjR'></small><noframes id='grCjR'>