Example usage for org.apache.lucene.queryparser.complexPhrase ComplexPhraseQueryParser parse

List of usage examples for org.apache.lucene.queryparser.complexPhrase ComplexPhraseQueryParser parse

Introduction

In this page you can find the example usage for org.apache.lucene.queryparser.complexPhrase ComplexPhraseQueryParser parse.

Prototype

@Override
    public Query parse(String query) throws ParseException 

Source Link

Usage

From source file:com.chimpler.example.FacetLuceneAdvancedSearcher.java

License:Apache License

public static void main(String args[]) throws Exception {
    if (args.length != 5) {
        System.err.println(//from   ww w. java2s. c  om
                "Parameters: [index directory] [taxonomy directory] [query] [field drilldown] [value drilldown]");
        System.exit(1);
    }

    String indexDirectory = args[0];
    String taxonomyDirectory = args[1];
    String query = args[2];
    String fieldDrilldown = args[3];
    String valueDrilldown = args[4];

    IndexReader indexReader = DirectoryReader.open(FSDirectory.open(new File(indexDirectory)));
    IndexSearcher indexSearcher = new IndexSearcher(indexReader);

    TaxonomyReader taxonomyReader = new DirectoryTaxonomyReader(FSDirectory.open(new File(taxonomyDirectory)));

    CategoryPath drillDownCategoryPath = new CategoryPath(fieldDrilldown + "/" + valueDrilldown, '/');

    FacetSearchParams searchParams = new FacetSearchParams();
    searchParams.facetRequests.add(new CountFacetRequest(new CategoryPath("author"), 100));
    searchParams.facetRequests.add(new CountFacetRequest(new CategoryPath("book_category"), 100));
    searchParams.facetRequests.add(new CountFacetRequest(drillDownCategoryPath, 100));

    ComplexPhraseQueryParser queryParser = new ComplexPhraseQueryParser(LUCENE_VERSION, "title",
            new StandardAnalyzer(LUCENE_VERSION));

    Query luceneQuery = queryParser.parse(query);
    //luceneQuery = DrillDownQuery.query(luceneQuery, drillDownCategoryPath);

    // Collectors to get top results and facets
    TopScoreDocCollector topScoreDocCollector = TopScoreDocCollector.create(10, true);
    FacetsCollector facetsCollector = FacetsCollector.create(searchParams, indexReader, taxonomyReader);
    indexSearcher.search(luceneQuery, MultiCollector.wrap(topScoreDocCollector, facetsCollector));
    System.out.println("Found:");

    for (ScoreDoc scoreDoc : topScoreDocCollector.topDocs().scoreDocs) {
        Document document = indexReader.document(scoreDoc.doc);
        System.out.printf("- book: id=%s, title=%s, book_category=%s, authors=%s, score=%f\n",
                document.get("id"), document.get("title"), document.get("book_category"),
                document.get("authors"), scoreDoc.score);
    }

    System.out.println("Facets:");
    for (FacetResult facetResult : facetsCollector.getFacetResults()) {
        System.out.println("- " + facetResult.getFacetResultNode().label);
        for (FacetResultNode facetResultNode : facetResult.getFacetResultNode().subResults) {
            System.out.printf("    - %s (%f)\n", facetResultNode.label.toString(), facetResultNode.value);
            for (FacetResultNode subFacetResultNode : facetResultNode.subResults) {
                System.out.printf("        - %s (%f)\n", subFacetResultNode.label.toString(),
                        subFacetResultNode.value);
            }
        }
    }
    taxonomyReader.close();
    indexReader.close();
}

From source file:com.chimpler.example.FacetLuceneIndexer.java

License:Apache License

public static void main(String args[]) throws Exception {
    //      if (args.length != 3) {
    //         System.err.println("Parameters: [index directory] [taxonomy directory] [json file]");
    //         System.exit(1);
    //      }//  w  w  w.  j av  a  2 s . c  o m

    String indexDirectory = "index";
    String taxonomyDirectory = "taxonomy";
    String jsonFileName = "/home/qiuqiang/workspace/facet-lucene-example/books.json";

    IndexWriterConfig writerConfig = new IndexWriterConfig(LUCENE_VERSION,
            new WhitespaceAnalyzer(LUCENE_VERSION));
    writerConfig.setOpenMode(OpenMode.APPEND);
    IndexWriter indexWriter = new IndexWriter(FSDirectory.open(new File(indexDirectory)), writerConfig);

    TaxonomyWriter taxonomyWriter = new DirectoryTaxonomyWriter(MMapDirectory.open(new File(taxonomyDirectory)),
            OpenMode.APPEND);

    TaxonomyReader taxonomyReader = new DirectoryTaxonomyReader(FSDirectory.open(new File(taxonomyDirectory)));

    String content = IOUtils.toString(new FileInputStream(jsonFileName));
    JSONArray bookArray = new JSONArray(content);

    Field idField = new IntField("id", 0, Store.YES);
    Field titleField = new TextField("title", "", Store.YES);
    Field authorsField = new TextField("authors", "", Store.YES);
    Field bookCategoryField = new TextField("book_category", "", Store.YES);

    indexWriter.deleteAll();

    FacetFields facetFields = new FacetFields(taxonomyWriter);

    for (int i = 0; i < bookArray.length(); i++) {
        Document document = new Document();

        JSONObject book = bookArray.getJSONObject(i);
        int id = book.getInt("id");
        String title = book.getString("title");
        String bookCategory = book.getString("book_category");

        List<CategoryPath> categoryPaths = new ArrayList<CategoryPath>();

        String authorsString = "";
        JSONArray authors = book.getJSONArray("authors");
        for (int j = 0; j < authors.length(); j++) {
            String author = authors.getString(j);
            if (j > 0) {
                authorsString += ", ";
            }
            categoryPaths.add(new CategoryPath("author", author));
            authorsString += author;
        }
        categoryPaths.add(new CategoryPath("book_category" + bookCategory, '/'));

        idField.setIntValue(id);
        titleField.setStringValue(title);
        authorsField.setStringValue(authorsString);
        bookCategoryField.setStringValue(bookCategory);

        facetFields.addFields(document, categoryPaths);

        document.add(idField);
        document.add(titleField);
        document.add(authorsField);
        document.add(bookCategoryField);

        indexWriter.addDocument(document);

        System.out.printf("Book: id=%d, title=%s, book_category=%s, authors=%s\n", id, title, bookCategory,
                authors);
    }

    taxonomyWriter.prepareCommit();
    try {
        taxonomyWriter.commit();
    } catch (Exception e) {
        taxonomyWriter.rollback();
    }

    //      taxonomyWriter.close();
    //      
    //      indexWriter.commit();
    //      indexWriter.close();

    String query = "story";

    IndexReader indexReader = DirectoryReader.open(indexWriter, false);
    IndexReader indexReader2 = DirectoryReader.open(indexWriter, false);
    System.out.println(indexReader == indexReader2);

    IndexSearcher indexSearcher = new IndexSearcher(indexReader);

    TaxonomyReader newTaxonomyReader = DirectoryTaxonomyReader.openIfChanged(taxonomyReader);
    if (newTaxonomyReader != null) {
        TaxonomyReader tmp = taxonomyReader;
        taxonomyReader = newTaxonomyReader;
        tmp.close();
    } else {
        System.out.println("null");
    }

    ArrayList<FacetRequest> facetRequests = new ArrayList<FacetRequest>();
    facetRequests.add(new CountFacetRequest(new CategoryPath("author"), 100));
    facetRequests.add(new CountFacetRequest(new CategoryPath("book_category"), 100));

    FacetSearchParams searchParams = new FacetSearchParams(facetRequests);

    ComplexPhraseQueryParser queryParser = new ComplexPhraseQueryParser(LUCENE_VERSION, "title",
            new StandardAnalyzer(LUCENE_VERSION));
    Query luceneQuery = queryParser.parse(query);

    // Collectors to get top results and facets
    TopScoreDocCollector topScoreDocCollector = TopScoreDocCollector.create(10, true);
    FacetsCollector facetsCollector = FacetsCollector.create(searchParams, indexReader, taxonomyReader);
    indexSearcher.search(luceneQuery, MultiCollector.wrap(topScoreDocCollector, facetsCollector));
    System.out.println("Found:");

    for (ScoreDoc scoreDoc : topScoreDocCollector.topDocs().scoreDocs) {
        Document document = indexReader.document(scoreDoc.doc);
        System.out.printf("- book: id=%s, title=%s, book_category=%s, authors=%s, score=%f\n",
                document.get("id"), document.get("title"), document.get("book_category"),
                document.get("authors"), scoreDoc.score);
    }

    System.out.println("Facets:");
    for (FacetResult facetResult : facetsCollector.getFacetResults()) {
        System.out.println("- " + facetResult.getFacetResultNode().label);
        for (FacetResultNode facetResultNode : facetResult.getFacetResultNode().subResults) {
            System.out.printf("    - %s (%f)\n", facetResultNode.label.toString(), facetResultNode.value);
            for (FacetResultNode subFacetResultNode : facetResultNode.subResults) {
                System.out.printf("        - %s (%f)\n", subFacetResultNode.label.toString(),
                        subFacetResultNode.value);
            }
        }
    }
    taxonomyReader.close();
    indexReader.close();

    taxonomyWriter.commit();
    taxonomyWriter.close();

    indexWriter.commit();
    indexWriter.close();

}

From source file:com.chimpler.example.FacetLuceneSearcher.java

License:Apache License

public static void main(String args[]) throws Exception {
    //      if (args.length != 3) {
    //         System.err.println("Parameters: [index directory] [taxonomy directory] [query]");
    //         System.exit(1);
    //      }//from  w  w w  .  j  a v a2 s.  c om

    String indexDirectory = "index";
    String taxonomyDirectory = "taxonomy";
    String query = "story";

    IndexReader indexReader = DirectoryReader.open(FSDirectory.open(new File(indexDirectory)));
    IndexSearcher indexSearcher = new IndexSearcher(indexReader);

    TaxonomyReader taxonomyReader = new DirectoryTaxonomyReader(FSDirectory.open(new File(taxonomyDirectory)));

    ArrayList<FacetRequest> facetRequests = new ArrayList<FacetRequest>();
    facetRequests.add(new CountFacetRequest(new CategoryPath("author"), 100));
    facetRequests.add(new CountFacetRequest(new CategoryPath("book_category"), 100));

    FacetSearchParams searchParams = new FacetSearchParams(facetRequests);

    ComplexPhraseQueryParser queryParser = new ComplexPhraseQueryParser(LUCENE_VERSION, "title",
            new StandardAnalyzer(LUCENE_VERSION));
    Query luceneQuery = queryParser.parse(query);

    // Collectors to get top results and facets
    TopScoreDocCollector topScoreDocCollector = TopScoreDocCollector.create(10, true);
    FacetsCollector facetsCollector = FacetsCollector.create(searchParams, indexReader, taxonomyReader);
    indexSearcher.search(luceneQuery, MultiCollector.wrap(topScoreDocCollector, facetsCollector));
    System.out.println("Found:");

    for (ScoreDoc scoreDoc : topScoreDocCollector.topDocs().scoreDocs) {
        Document document = indexReader.document(scoreDoc.doc);
        System.out.printf("- book: id=%s, title=%s, book_category=%s, authors=%s, score=%f\n",
                document.get("id"), document.get("title"), document.get("book_category"),
                document.get("authors"), scoreDoc.score);
    }

    System.out.println("Facets:");
    for (FacetResult facetResult : facetsCollector.getFacetResults()) {
        System.out.println("- " + facetResult.getFacetResultNode().label);
        for (FacetResultNode facetResultNode : facetResult.getFacetResultNode().subResults) {
            System.out.printf("    - %s (%f)\n", facetResultNode.label.toString(), facetResultNode.value);
            for (FacetResultNode subFacetResultNode : facetResultNode.subResults) {
                System.out.printf("        - %s (%f)\n", subFacetResultNode.label.toString(),
                        subFacetResultNode.value);
            }
        }
    }
    taxonomyReader.close();
    indexReader.close();
}

From source file:org.rapidpm.modul.javafx.searchbox.searchbox.SearchBox.java

License:Apache License

public SearchBox() {
    setId("SearchBox");
    setMinHeight(24);/*from w w  w .ja  v a  2s  . c  o  m*/
    setPrefSize(150, 24);
    setMaxHeight(24);
    textBox = new TextField();
    textBox.setPromptText(cdiHolder.getRessource("promt.text"));
    clearButton = new Button();
    clearButton.setVisible(false);
    getChildren().addAll(textBox, clearButton);
    clearButton.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent actionEvent) {
            textBox.setText("");
            textBox.requestFocus();
            showAllIndexElements();
        }
    });

    textBox.setOnKeyReleased(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent keyEvent) {
            if (keyEvent.getCode() == KeyCode.DOWN) {
                contextMenu.setFocused(true);
            } else if (keyEvent.getCode() == KeyCode.ENTER) {
                //filtere Tabelle mit den Ergebnisse der Suche
            } else {
                if (logger.isDebugEnabled()) {
                    logger.debug("keyEvent " + keyEvent);
                }
            }
        }
    });
    textBox.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
            final String textBoxText = textBox.getText();
            clearButton.setVisible(textBoxText.length() != 0);
            if (textBoxText.length() == 0) {
                if (contextMenu != null)
                    contextMenu.hide();
                showError(null);
                showAllIndexElements();
            } else {
                boolean haveResults = false;
                final Map<DocumentType, List<Long>> results = new HashMap<DocumentType, List<Long>>();
                results.clear();
                try {
                    String queryString = "";
                    final String[] splitArray = textBoxText.split(" ");
                    for (final String split : splitArray) {
                        final boolean matches = split.matches("\\w+");
                        queryString = queryString + " " + (matches ? "*" : "") + split + (matches ? "*" : "");
                    }
                    if (logger.isDebugEnabled()) {
                        logger.debug("queryString = " + queryString);
                    }

                    final ComplexPhraseQueryParser qp = new ComplexPhraseQueryParser(Version.LUCENE_43,
                            IDX_VALUE_FIELD_NAME, analyzer);
                    qp.setAllowLeadingWildcard(true);
                    qp.setDefaultOperator(QueryParser.Operator.AND);
                    final Query query = qp.parse(queryString);
                    if (logger.isDebugEnabled()) {
                        logger.debug("termQuery.toString() = " + query.toString());
                    }
                    final TopDocs topDocs = indexSearcher.search(query, 100);

                    final int totalHits = topDocs.totalHits;
                    if (logger.isDebugEnabled()) {
                        logger.debug("totalHits = " + totalHits);
                    }
                    if (totalHits > 0) {
                        haveResults = true;
                    } else {
                        haveResults = false;
                    }
                    // check if we have any results
                    //                        for (List<T> categoryResults: results.values()) {
                    //                            if (categoryResults.size() > 0) {
                    //                                haveResults = true;
                    //                                break;
                    //                            }
                    //                        }
                    final ArrayList<Long> documentList = new ArrayList<Long>(totalHits);
                    for (final ScoreDoc scoreDoc : topDocs.scoreDocs) {
                        final int docId = scoreDoc.doc;
                        final Document document = indexSearcher.getIndexReader().document(docId);
                        documentList.add(Long.valueOf(document.get(ITEM_ID)));
                    }
                    results.put(DocumentType.SAMPLE, documentList);

                } catch (IOException | ParseException e) {
                    logger.error(e);
                }
                if (haveResults) {
                    showError(null);
                    //populateMenu(results);

                    filtertable(results);
                    if (!contextMenu.isShowing())
                        contextMenu.show(SearchBox.this, Side.BOTTOM, 10, -5);
                } else {
                    if (searchErrorTooltip.getText() == null)
                        showError(cdiHolder.getRessource("nohits.info"));
                    contextMenu.hide();
                }
                contextMenu.setFocused(true);
            }
        }
    });
    // create info popup
    infoBox = new VBox();
    infoBox.setId("search-info-box");
    infoBox.setFillWidth(true);
    infoBox.setMinWidth(USE_PREF_SIZE);
    infoBox.setPrefWidth(350);
    infoName = new Label();
    infoName.setId("search-info-name");
    infoName.setMinHeight(USE_PREF_SIZE);
    infoName.setPrefHeight(28);
    infoDescription = new Label();
    infoDescription.setId("search-info-description");
    infoDescription.setWrapText(true);
    infoDescription.setPrefWidth(infoBox.getPrefWidth() - 24);
    infoBox.getChildren().addAll(infoName, infoDescription);
    extraInfoPopup.getContent().add(infoBox);
    // hide info popup when context menu is hidden
    contextMenu.setOnHidden(new EventHandler<WindowEvent>() {
        @Override
        public void handle(WindowEvent windowEvent) {
            extraInfoPopup.hide();
        }
    });
    refreshIndex(Collections.<T>emptyList());
}