标题问这一切...我想做一个多字段短语搜索在Lucene ...如何做?例如:字段格式为String s[] = {"title","author","content"};我想在所有字段中搜索harry potter ..我该怎么做?有人能提供一个示例片段吗?
String s[] = {"title","author","content"};
harry potter
oiopk7p51#
1.使用MultiFieldQueryParser,它是一个QueryParser,用于构造查询以搜索多个字段。。1.另一种方法是使用Create一个由TermQurey组成的BooleanQuery(在你的case短语查询中)。1.第三种方法是将其他字段的内容包含到default内容字段中。
MultiFieldQueryParser
default
新增
一般来说,对多个字段进行查询并不是用户输入查询的最佳实践。更常见的是,通过组合各个字段,将所有要搜索的单词编入内容或关键字字段的索引中。
更新
用法:
Query query = MultiFieldQueryParser.parse(Version.LUCENE_30, new String[] {"harry potter","harry potter","harry potter"}, new String[] {"title","author","content"},new SimpleAnalyzer()); IndexSearcher searcher = new IndexSearcher(...); Hits hits = searcher.search(query);
MultiFieldQueryParser将以这种方式解析查询:(请参阅javadoc)分析在指定字段上搜索的查询。如果指定了x个字段,则将有效地构造:(字段1:查询1)(字段2:查询2)(字段3:查询3)...(字段x:查询x)希望这对你有帮助。
jxct1oxe2#
谷歌搜索的结果显示:http://lucene.472066.n3.nabble.com/Phrase-query-on-multiple-fields-td2292312.html。因为这是最新的和最好的,我会去与他的方法,我想...然而,它可能会帮助有人谁正在寻找像我一样的东西...
luaexgnf3#
你需要使用MultiFieldQueryParser和转义字符串。我已经用Lucene 8.8.1测试过了,它像魔术一样工作。
Lucene 8.8.1
String queryStr = "harry potter"; queryStr = "\"" + queryStr.trim() + "\""; Query query = new MultiFieldQueryParser(new String[]{"title","author","content"}, new StandardAnalyzer()).parse(queryStr); System.out.println(query);
它将打印。
(title:"harry potter") (author:"harry potter") (content:"harry potter")
3条答案
按热度按时间oiopk7p51#
1.使用
MultiFieldQueryParser
,它是一个QueryParser,用于构造查询以搜索多个字段。。1.另一种方法是使用Create一个由TermQurey组成的BooleanQuery(在你的case短语查询中)。
1.第三种方法是将其他字段的内容包含到
default
内容字段中。新增
一般来说,对多个字段进行查询并不是用户输入查询的最佳实践。更常见的是,通过组合各个字段,将所有要搜索的单词编入内容或关键字字段的索引中。
更新
用法:
MultiFieldQueryParser
将以这种方式解析查询:(请参阅javadoc)分析在指定字段上搜索的查询。如果指定了x个字段,则将有效地构造:
(字段1:查询1)(字段2:查询2)(字段3:查询3)...(字段x:查询x)
希望这对你有帮助。
jxct1oxe2#
谷歌搜索的结果显示:
http://lucene.472066.n3.nabble.com/Phrase-query-on-multiple-fields-td2292312.html。
因为这是最新的和最好的,我会去与他的方法,我想...然而,它可能会帮助有人谁正在寻找像我一样的东西...
luaexgnf3#
你需要使用
MultiFieldQueryParser
和转义字符串。我已经用Lucene 8.8.1
测试过了,它像魔术一样工作。它将打印。