代码之家  ›  专栏  ›  技术社区  ›  Saurabh Nemade

Lucene查询修改

  •  1
  • Saurabh Nemade  · 技术社区  · 7 年前

    我需要修改字符串格式的lucene查询值。 我将lucene查询作为用户界面的输入,并将其传递给elastic。

    例如。

    输入:姓名:“abc”,年龄:26岁

    预期输出:名称:“abcmodified”,用户年龄:26

    如何在java中解析和修改字符串格式的lucene查询?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Almog    7 年前

    你试过调查吗 org.apache.lucene.queryparser.classic.QueryParser ? 它具有从输入字符串返回Lucene查询对象的功能。例如:

    String rawQuery = "name:abc AND age:26";
    QueryParser parser = new QueryParser(Version.LUCENE_45, null, new WhitespaceAnalyzer(Version.LUCENE_45));
    BooleanQuery query = (BooleanQuery) praser.parse(rawQuery);
    query.clauses().get(0).setQuery(new TermQuery(new Term("name", "abcmodified")));
    query.clauses().get(1).setQuery(new TermQuery(new Term("userage", "26")));
    System.out.println(query);
    

    将打印 +name:abcmodified +userage:26 ,这基本上就是你想要的。显然,您可以使用递归方法进行更智能的处理,该方法根据查询类型(布尔、前缀、术语、模糊等)遍历查询

    希望这有帮助!