Example usage for org.apache.lucene.search.highlight QueryTermExtractor QueryTermExtractor

List of usage examples for org.apache.lucene.search.highlight QueryTermExtractor QueryTermExtractor

Introduction

In this page you can find the example usage for org.apache.lucene.search.highlight QueryTermExtractor QueryTermExtractor.

Prototype

QueryTermExtractor

Source Link

Usage

From source file:org.conifer.MyBean.java

License:Apache License

public static String sortOutTerms(String queryString, String resultString, String tag, String strLen)
        throws org.apache.lucene.queryParser.ParseException {
    String startTag = "<" + tag + ">";
    String endTag = "</" + tag + ">";
    StringBuffer termBuf = new StringBuffer();
    int addToLen = startTag.length() + endTag.length();

    int resultLen = Integer.parseInt(strLen);
    String displayString = resultString;

    QueryParser luceneParser = new QueryParser("text", new StandardAnalyzer());
    QueryTermExtractor luceneTerms = new QueryTermExtractor();
    Query luceneQuery = null;/*from  w  ww .  ja v  a  2  s .  c  o  m*/
    Query query = null;
    WeightedTerm[] weightTerms = null;
    luceneQuery = luceneParser.parse(queryString);
    weightTerms = luceneTerms.getTerms(luceneQuery);

    for (int i = 0; i < weightTerms.length; i++) {
        String term = weightTerms[i].getTerm();
        Pattern replace = Pattern.compile(term, Pattern.CASE_INSENSITIVE);
        Matcher matcher = replace.matcher(displayString);
        while (matcher.find()) {
            //displayString = matcher.replaceAll(startTag + term + endTag);
            if (termBuf.toString().indexOf(matcher.group(0)) == -1) {
                displayString = displayString.replaceAll(matcher.group(0),
                        startTag + matcher.group(0) + endTag);
                resultLen += addToLen;
            } //if
            termBuf.append(matcher.group(0));
            termBuf.append(",");
        } //while
    } //for

    int hlStart = displayString.indexOf(startTag);
    //System.out.println("hlStart: " + hlStart);

    if (hlStart > resultLen) {
        String tmpString = displayString.substring(0, hlStart);
        hlStart = tmpString.lastIndexOf(" ");
        displayString = "..." + displayString.substring(++hlStart);
        resultLen += 3;
    } //if

    if (displayString.length() > resultLen) {
        displayString = displayString.substring(0, resultLen);
        hlStart = displayString.lastIndexOf(startTag);
        int hlEnd = displayString.lastIndexOf(endTag);
        if (hlEnd < hlStart)
            displayString = displayString.substring(0, --hlStart);
        displayString = displayString + "...";
    } //if

    return displayString;
}