我正在尝试匹配文档中的短语,不幸的是,我在目录中的格式如下:
Includes sides?** *No*
或
Includes sides?** *Yes*
搜索任何一个失败,例如
Search idx_test where MATCH('"Includes sides?** *Yes*"')
如果我搜索
Search idx_test where MATCH('"Includes sides"')
它不会失败(但同时找到)
如果我作为测试将数据本身更改为:
Includes sides No
我可以用Sphinx找到它
Search idx_test where MATCH('"Includes sides No"')
很明显,?
和*
需要转义。然而,我没有做过任何工作,例如使用\*
答案 0 :(得分:0)
试。,
...where MATCH('"Includes sides\\? \\*Yes\\*"')
需要多个,一个在sql字符串中,第二个用于扩展语法查询。
如果你也用像php这样的语言把它写成一个字符串,可能需要更多引号,以便在php字符串中转义。
也可以从查询中删除它们,它们只有查询语法,因此不需要更改数据。
(如果使用phrase_boundary
)
答案 1 :(得分:0)
我尝试了一些不起作用的解决方案:
我在配置中添加了regexp_来映射?=>qmark
和*=>asterisk
。无论我如何搜索,Includes sidesqmark
和Includes sides qmark
(后者假设?被视为单独的工作
我评论了正则表达式,并尝试在Includes Sides No
上搜索?
和*
没有被编入索引的逻辑,因此这些空格不存在。
我在Includes sides
和No
之间添加了间隔,假设一个或多个字符没有索引但是以某种方式占用了字符空间,例如Includes sides No
。
我添加了双重逃脱,正如我所建议的那样`"包括双方\?\ * \ * \ *否"也失败了。
这些都不起作用。
我尝试过NEAR /和>>一起工作:
("Includes sides" NEAR/2 "No") ("Includes sides" >> "No")
看起来很笨重。
最后我做了这个有效的工作
"Includes sides \\*"No"
哪个有效,但对我来说是一个完全神秘的原因虽然我发布它,因为它解决了问题。我希望其他人可以解释这背后的机制:
\\
是在sphinxql ?
不是 "Includes sides\\?\\*\\* \\*No
不起作用
"Includes sides\\*\\* \\*No
不起作用?如果它没有索引/识别?
但显然是*
,那么我需要在Includes
之后逃避这两个问题。然而,?
之后的*
和Includes
都不存在,但asterisk
之前的No
也不存在。
很抱歉,如果我的解决方案有效,请回答问题。如果我有更好的方式来提供我使用的解决方案和它所揭示的问题,请告诉我,因为我不想在这里混淆问题。