【发布时间】:2014-12-19 13:51:56
【问题描述】:
我有几千个字符串看起来像这样
- Foo-Bar-Herp
- Foo-Bar-Derp
- Baz-Blurb 别的东西
我想提供一个有效的搜索,以便
- “foo bar”(标记化前缀)
- “foo herp”(跳过标记)
- “foo-bar-”(确切前缀)
- “Bar-Herp”(中间的确切字符串)
- “foo ba”(一个完整的标记和另一个标记的前缀)
等等。 全部返回第一个字符串(可能还有其他字符串),但是
- “herp foo”(顺序错误,不重要)
- “foo blerp”(不是所有标记)
- “murp herp”(并非所有标记)
不要。
即正确的前缀匹配和令牌(可能是前缀)匹配都应该匹配,与大小写无关,但查询中的所有令牌都必须在文档中。
我使用 StandardAnalyzer 和带有前缀查询的通用 QueryParser 设置了典型的 Lucene 示例。
我想我可能需要一个 BinaryQuery 来声明我需要查询中的所有标记都在文档中,但我不太清楚要获取标记来构建它(查询是用户提供的)。我也意识到使用 StringField 而不是 TextField 可以为我提供确切的字符串匹配,而不是令牌匹配,但我不确定这是否可以与上述内容结合使用?
我应该怎么做?我什至不必使用 Lucene 来完成它,但它看起来很合适。
【问题讨论】:
-
你说“foo herp”应该返回结果,但“foo derp”不应该——前提是你有 Foo-Bar-Herp 和 Foo-Bar-Derp。你能详细说明一下吗?
-
我只是说它不应该返回第一个结果。它应该返回第二个结果。更改示例。