如何创建更复杂的 Lucene 查询字符串?

发布于 2024-07-14 04:36:30 字数 628 浏览 4 评论 0原文

这个问题是这个问题的衍生问题。 我的询问有两个方面,但因为两者都是相关的,所以我认为将它们放在一起是个好主意。

  • 如何以编程方式创建查询。 我知道我可以开始创建字符串并使用查询解析器解析该字符串。 但当我从其他资源收集零碎的信息时,有一种编程方法可以做到这一点。
  • Lucene 查询的语法规则是什么?

--编辑--

我将给出我想要进行的查询的要求示例:
假设我有 5 个字段:

  1. 名字
  2. 姓氏
  3. 年龄
  4. 地址
  5. 一切

所有字段都是可选的,最后一个字段应搜索所有其他字段。 我检查每个字段,看看它是否是 IsNullOrEmpty()。 如果不是,我想附加我的查询的一部分,以便它添加相关的搜索部分。
名字和姓氏应该完全匹配,并且比其他字段具有更大的权重。 年龄是一个字符串,应该完全匹配。 地址的顺序可能会有所不同。 一切都可以按顺序变化。

我该怎么办?

This question is a spin-off from this question.
My inquiry is two-fold, but because both are related I think it is a good idea to put them together.

  • How to programmatically create queries. I know I could start creating strings and get that string parsed with the query parser. But as I gather bits and pieces of information from other resources, there is a programattical way to do this.
  • What are the syntax rules for the Lucene queries?

--EDIT--

I'll give a requirement example for a query I would like to make:
Say I have 5 fields:

  1. First Name
  2. Last Name
  3. Age
  4. Address
  5. Everything

All fields are optional, the last field should search over all the other fields.
I go over every field and see if it's IsNullOrEmpty(). If it's not, I would like to append a part of my query so it adds the relevant search part.
First name and last name should be exact matches and have more weight then the other fields. Age is a string and should exact match. Address can varry in order. Everything can also varry in order.

How should I go about this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

永言不败 2024-07-21 04:36:30

使用 BooleanQuery 类组成查询对象。 创建其中之一并向其 add() 其他 Query 对象以创建更大的析取查询:

  • BooleanQuery q = new BooleanQuery();
  • q.add(qFirstName, Occur.SHOULD);
  • q.add(qLastName, Occur.SHOULD);
  • ...

可以使用 Term 和 TermQuery 类构建原子查询。

(链接和示例适用于 Lucene Java,但 .NET 应该类似。)

Use the BooleanQuery class to compose query objects. Create one of these and add() other Query objects to it to create a larger, disjunctive query:

  • BooleanQuery q = new BooleanQuery();
  • q.add(qFirstName, Occur.SHOULD);
  • q.add(qLastName, Occur.SHOULD);
  • ...

Atomic queries can be built with the Term and TermQuery classes.

(Links and example are for Lucene Java, but .NET should be similar.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文