带空格的lucene通配符查询

带空格的lucene通配符查询,lucene,wildcard,lucene.net,Lucene,Wildcard,Lucene.net,我有Lucene索引,它有城市名称。 考虑一下,我想搜索“新德里”。我有字符串“New Del”,我想传递给Lucene searcher,我希望输出为“New德里”。 如果我生成像Name:New Del*这样的查询,它将给出所有包含“New and Del”的城市。 有没有办法创建带有空格的Lucene查询通配符查询? 我参考并尝试了一些解决方案,给出了@听起来你已经通过分析为你的城市名称编制了索引。这将使这一点更加困难。通过分析,“新德里”和“德里”是两个独立的术语,必须如此对待。用这样的

我有Lucene索引,它有城市名称。 考虑一下,我想搜索“新德里”。我有字符串“New Del”,我想传递给Lucene searcher,我希望输出为“New德里”。 如果我生成像Name:New Del*这样的查询,它将给出所有包含“New and Del”的城市。 有没有办法创建带有空格的Lucene查询通配符查询?
我参考并尝试了一些解决方案,给出了@

听起来你已经通过分析为你的城市名称编制了索引。这将使这一点更加困难。通过分析,“新德里”和“德里”是两个独立的术语,必须如此对待。用这样的通配符在多个术语上搜索往往会有点困难

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

QueryParser parser=newqueryparser(“defaultField”,分析器);
Query Query=parser.parse(“cityname:new\\del*”;
或者您可以使用一个简单的
通配符查询

Query Query=newwildcardquery(新术语(“cityname”、“newdel*”));

使用标准分析仪分析的现场:

您将需要依赖以下查询:

SpanQuery queryPart1=新的SpanTermQuery(新术语(“城市名称”、“新”));
SpanQuery queryPart2=新的spanMultitermQueryRapper(新的通配符查询(新术语(“cityname”、“del*”)));
Query Query=new spanarquery(new SpanQuery[]{query1,query2},0,true);
或者,您可以使用诸如
W(new,del*)
之类的查询,使用环绕查询解析器(该解析器提供查询语法,旨在为span查询提供更强大的支持):

org.apache.lucene.queryparser.round.parser.queryparser-surroundparser=new org.apache.lucene.queryparser.round.parser.queryparser();
SrndQuery SrndQuery=surroundparser.parse(“W(new,del*)”;
query=srndquery.makeLuceneQueryField(“cityname”,new BasicQueryFactory());

正如我从您提到的线程()中了解到的,您可以使用空格进行精确匹配,也可以使用通配符处理任意部分

因此,类似这样的方法应该有效-
[New*Del*]