gpt4 book ai didi

带有空格的lucene通配符查询

转载 作者:行者123 更新时间:2023-12-04 19:02:26 25 4
gpt4 key购买 nike

我有包含城市名称的 Lucene 索引。
考虑我想搜索“新德里”。我有字符串“New Del”,我想将其传递给 Lucene 搜索器,我希望输出为“New Delhi”。
如果我生成像 Name:New Del* 这样的查询,它会给我所有带有“New and Del”的城市。
有什么方法可以创建带有空格的 Lucene 查询通配符查询?
我引用并尝试了一些解决方案@ http://www.gossamer-threads.com/lists/lucene/java-user/5487

最佳答案

听起来您已经通过分析索引了您的城市名称。这往往会使这变得更加困难。通过分析,"new"和“德里”是不同的术语,必须如此对待。使用像这样的通配符搜索多个术语往往会更困难一些。

最简单的解决方案是在没有标记化的情况下索引您的城市名称(尽管小写可能不是一个坏主意)。然后,您只需转义空格即可使用查询解析器进行搜索:

QueryParser parser = new QueryParser("defaultField", analyzer);
Query query = parser.parse("cityname:new\\ del*");

或者你可以使用一个简单的 WildcardQuery :

Query query = new WildcardQuery(new Term("cityname", "new del*"));

用标准分析仪分析的场:

您将需要依赖 SpanQueries,如下所示:

SpanQuery queryPart1 = new SpanTermQuery(new Term("cityname", "new"));
SpanQuery queryPart2 = new SpanMultiTermQueryWrapper(new WildcardQuery(new Term("cityname", "del*")));
Query query = new SpanNearQuery(new SpanQuery[] {query1, query2}, 0, true);

或者,您可以使用环绕查询解析器(它提供旨在为跨度查询提供更强大支持的查询语法),使用类似 W(new, del*) 的查询。 :

org.apache.lucene.queryparser.surround.parser.QueryParser surroundparser = new org.apache.lucene.queryparser.surround.parser.QueryParser();
SrndQuery srndquery = surroundparser.parse("W(new, del*)");
query = srndquery.makeLuceneQueryField("cityname", new BasicQueryFactory());

关于带有空格的lucene通配符查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34529261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com