Search 带通配符的Lucene多短语搜索

Search 带通配符的Lucene多短语搜索,search,lucene,wildcard,multiple-columns,phrase,Search,Lucene,Wildcard,Multiple Columns,Phrase,我一直在尝试做一个lucene搜索查询,输入“Foo B”将返回“Foo Bar”、Foo Bear、Foo Build”等,但不会返回ID为“Foo”且在“描述”字段中有“Bar”字样的记录 我已经研究了多短语,但它从未返回任何结果,下面是我一直在尝试的 Term firstTerm = new Term("jobTitle", "Entry"); Term secondTerm = new Term("jobTitle", "Artist");

我一直在尝试做一个lucene搜索查询,输入“Foo B”将返回“Foo Bar”、Foo Bear、Foo Build”等,但不会返回ID为“Foo”且在“描述”字段中有“Bar”字样的记录

我已经研究了多短语,但它从未返回任何结果,下面是我一直在尝试的

        Term firstTerm = new Term("jobTitle", "Entry");
        Term secondTerm = new Term("jobTitle", "Artist");
        Term asdTerm = new Term(fld)

        Term[] tTerms = new Term[]{firstTerm, secondTerm};
        MultiPhraseQuery multiPhrasequery = new MultiPhraseQuery();
            multiPhrasequery.add( tTerms );

             org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(multiPhrasequery, this.type).setSort(sort);
         results = hibQuery.list();

我看到的可能问题是大写。
“条目”
“艺术家”“
不会通过查询解析器传递,因此不会通过分析器运行,因此区分大小写。您正在编制索引的字段可能是使用包含
小写过滤器的分析器进行分析的,因此结尾项不会包含前导大写字母。在不知道您如何索引文档的情况下,我不能肯定这会解决问题,但这似乎是最有可能的


修复了这个问题,您创建的查询应该与jobTitle字段中的术语
“entry”
“Artister”
匹配。

谢谢,这确实回答了我的问题,但它也告诉我,这仍然不是我需要去lol的路线,因为我只需要在一个字段中获得“搜索短语”的结果,而不是“搜索”从x字段和“短语”从为什么,或一个条目只有一个术语,谢谢!我认为问题在于你误解了
多片语的工作原理<代码>添加({term1,term2})在短语中的同一位置添加这两个选项,作为备选项<代码>添加(第1条);增加(第2条)将它们添加到连续的位置,这可能就是您要查找的位置。我建议你仔细阅读这门课的内容。是的,我只是想了解人们用通配符之类的词搜索短语的实际方式,并且发现了很多不同的(而且很多时候都过时了)结果,这让人目眩。我试着像add(term1)那样单独添加它们;增加(第2条);但是它没有返回任何内容。只是从lucene找到了这个“要使用这个类,要搜索短语“Microsoft app*”,首先使用术语“Microsoft”上的add(术语),然后使用IndexReader.terms(术语)查找以“app”为前缀的所有术语,然后使用MultiPhraseQuery.add(术语[]术语)将它们添加到查询中。“我觉得这非常低效,执行初始查询,然后查询这些结果的每个组合这正是Lucene进行通配符查询的方式,方法是枚举满足该条件的术语,并生成“基本查询”,如
BooleanQuery
TermQuery
,然后根据索引运行这些查询。但是您不想查询它,不,您想从
AtomicReader.terms(“field”).iterator(TermsEnum)获取
TermEnum
,然后使用
seekCeil
方法查找要包含在
多短语中的需要枚举的术语的权限。