让我们使用电子邮件作为文档的示例。你有你的主题,身体,来自的人,并且我们也可以标记它们(如gmail那样)
根据我对QueryParser的理解,我给它一个字段和解析器类型。如果用户输入文本,则用户只搜索我设置的任何内容。我注意到如果我写fieldName: text to search
它会在主题或身体字段中查找但是我如何进行常规查询,例如“有趣的问题独角兽”,找到主题中的一些字符串的结果,身体里的其他人? ATM因为我知道这很容易我做了一个名为ALL的字段并将所有其他字段组合到那个但我想知道我怎么能以适当的方式做到这一点。特别是因为我的下一个应用程序依赖于文本搜索
答案 0 :(得分:2)
使用MultiFieldQueryParser。您可以使用以下构造函数指定要搜索的字段列表。
MultiFieldQueryParser(Version matchVersion, String[] fields, Analyzer analyzer)
这将生成一个查询,就像您在不同的字段上创建了多个查询一样。这部分解决了您的问题。这仍然不匹配field1中的一个术语匹配和field2中的另一个匹配。为此,正如您正确指出的那样,您需要将所有字段组合在一个字段中并在该字段中进行搜索。不过,当查询术语不跨越字段边界时,您会发现MultiFieldQueryParser非常有用。