Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

It seems that escaped query characters are not treated as escaped when calling queryParser.Parse() #13962

Open
suchoss opened this issue Oct 29, 2024 · 0 comments
Labels

Comments

@suchoss
Copy link

suchoss commented Oct 29, 2024

Description

Having following code:

package org.example;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.core.LowerCaseFilter;
import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilter;
import org.apache.lucene.analysis.standard.StandardFilter;
import org.apache.lucene.analysis.standard.StandardTokenizer;
import org.apache.lucene.util.Version;

import java.io.Reader;

public class DefaultQA extends Analyzer
{
    private Version _version = Version.LUCENE_48;

    @Override
    protected TokenStreamComponents createComponents(String s, Reader reader) {
        Tokenizer tokenizer = new StandardTokenizer(_version, reader);
        TokenStream result = new StandardFilter(_version, tokenizer);
        result = new LowerCaseFilter(_version, result);
        result = new ASCIIFoldingFilter(result);

        return new TokenStreamComponents(tokenizer, result);
    }
}
package org.example;

import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.util.Version;

public class Main {
    public static void main(String[] args) throws ParseException {
        var qa = new DefaultQA();

        var queryParser = new QueryParser(Version.LUCENE_48, "fieldName", qa);
        queryParser.setDefaultOperator(QueryParser.Operator.AND);

        var query = QueryParser.escape("more&more"); //this is the query I am trying to "parse"

        var searchQuery = queryParser.parse(query);
        var searchQuery2 = queryParser.createBooleanQuery("fieldName", query);
        var searchQuery3 = queryParser.createPhraseQuery("fieldName", query);

        System.out.println(searchQuery);
        System.out.println(searchQuery2);
        System.out.println(searchQuery3);
    }
}

I am getting this result:

+fieldName:more +fieldName:more
fieldName:more fieldName:more
fieldName:"more more"

But what I expected was escaped query:

+fieldName:more\&more
fieldName:more\&more
fieldName:"more\&more"

It seems as bug to me that escaped query doesn't stay escaped.

Original issue was found on Lucenenet (Lucene.NET) port (apache/lucenenet#850)

Version and environment details

Java Lucene 4.8, but it was allegedly tested even in Lucene 10.0.0 with the same results

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant