在 Sphinx 查询中使用 OR 运算符进行精确搜索
Use exact search with OR operator inside Sphinx query
sphinx 扩展语法可以提供不同的搜索选项。
- 精确搜索:"I love to eat" //将匹配精确短语
- 或搜索:(吃|睡|梦)
是否可以混合使用它们并构建这样的查询:
"I love to (eat|sleep|dream)"
我知道可以简化它并将 OR 条件拆分为不同的确切短语,例如:
"I love to eat" | "I love to sleep" | "I love to dream"
但我计划使用很多内部有很多选项的 OR 组,扩展这个查询最终会得到一个巨大的。
那么在 Sphinx 中是否可以在完全匹配语法中使用 OR 语法?
不,不可能在 短语运算符 中使用 'OR'(强制相邻词的 "
周围的词)- 专有名称对于你所说的 'exact match'。
唉,没有另一个组合的 'strict order' 运算符和 'near'(即没有 'just before' 运算符)。所以你被迫同时使用两者,所以像
("I love to" << (eat|sleep|dream)) NEAR/3 ("I love to" NEAR/1 (eat|sleep|dream))
哪个更简单,更复杂!需要中间的 NEAR/3 来确保您匹配文档中的相同句子(否则会出现误报的边缘情况)。
如果您有很多这样的 'OR' 列表,一个离奇的想法是不要在查询中实现它们,而是使用 wordforms。缺点是你需要提前知道它们(即编译到索引中)并且 'opting out' 比较复杂。
sphinx 扩展语法可以提供不同的搜索选项。
- 精确搜索:"I love to eat" //将匹配精确短语
- 或搜索:(吃|睡|梦)
是否可以混合使用它们并构建这样的查询:
"I love to (eat|sleep|dream)"
我知道可以简化它并将 OR 条件拆分为不同的确切短语,例如:
"I love to eat" | "I love to sleep" | "I love to dream"
但我计划使用很多内部有很多选项的 OR 组,扩展这个查询最终会得到一个巨大的。
那么在 Sphinx 中是否可以在完全匹配语法中使用 OR 语法?
不,不可能在 短语运算符 中使用 'OR'(强制相邻词的 "
周围的词)- 专有名称对于你所说的 'exact match'。
唉,没有另一个组合的 'strict order' 运算符和 'near'(即没有 'just before' 运算符)。所以你被迫同时使用两者,所以像
("I love to" << (eat|sleep|dream)) NEAR/3 ("I love to" NEAR/1 (eat|sleep|dream))
哪个更简单,更复杂!需要中间的 NEAR/3 来确保您匹配文档中的相同句子(否则会出现误报的边缘情况)。
如果您有很多这样的 'OR' 列表,一个离奇的想法是不要在查询中实现它们,而是使用 wordforms。缺点是你需要提前知道它们(即编译到索引中)并且 'opting out' 比较复杂。