Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将regexp与sphinx一起使用_Regex_Sphinx_Character Encoding - Fatal编程技术网

将regexp与sphinx一起使用

将regexp与sphinx一起使用,regex,sphinx,character-encoding,Regex,Sphinx,Character Encoding,我需要做一个算法,允许我在sphinx中使用不确定(regexp)搜索 例如:我需要找到一个包含不确定符号的短语:“2x4”可能看起来像“2x4”或“2*4”或“2-4” 我想这样做:“2(x*)-4”。但如果我试图在查询中使用这个结构,斯芬克斯将其拆分为三个词:“2”,“x*”(x-)和“4”: 像《丑恶黑客》一样,我会做一些类似(2x4)|(2*4)|(2-4)的事情,但如果我得到一个像“2x4x2.2”这样的大短语,并且需要“2(x*)-4(x*)-2(.|,)2”,这不是一个好的解决方案

我需要做一个算法,允许我在sphinx中使用不确定(regexp)搜索

例如:我需要找到一个包含不确定符号的短语:“2x4”可能看起来像“2x4”或“2*4”或“2-4”

我想这样做:“2(x*)-4”。但如果我试图在查询中使用这个结构,斯芬克斯将其拆分为三个词:“2”,“x*”(x-)和“4”:

像《丑恶黑客》一样,我会做一些类似(2x4)|(2*4)|(2-4)的事情,但如果我得到一个像“2x4x2.2”这样的大短语,并且需要“2(x*)-4(x*)-2(.|,)2”,这不是一个好的解决方案

我可以使用“charset_table”选项来定义“*>x”、“->x”、“,>”等等,但这不是一个灵活的决定

你能找到更好的解决办法吗


ps:对不起,我的英语=)

据我所知,Sphinx不支持正则表达式搜索。此外,虽然(通过
-e
选项启用)有支持备选方案的运算符(“OR”运算符:|)和排序运算符(“严格顺序运算符:”),但Sphinx不支持正则表达式搜索。此外,(通过
-e
选项启用)有支持备选方案的运算符(“OR”)运算符:|)和排序(严格顺序运算符:Sphinx为整个单词编制索引,并将单词“标记”为整数,然后存储在索引中。因此,正则表达式无法工作,因为没有原始单词

然而,还有dict=keywords,它将单词存储在索引中。但是它现在只能用于*和?通配符,不支持正则表达式

此外,也许可以使用这里讨论的技术

这显示了如何使用trigram索引实现通用正则表达式搜索 它本身将用作三叉树索引。您将三叉树存储为关键字,然后 sphinx可以运行系统输出的布尔查询

(普通的斯芬克斯,其工作原理与“索引词搜索”部分的文档非常相似
技巧是使用sphinx作为索引Reg Ex搜索的后端)

sphinx为整个单词编制索引,并将单词“标记”为整数,然后存储在索引中。因为没有原始单词,所以这种正则表达式无法工作

然而,还有dict=keywords,它将单词存储在索引中。但是它现在只能用于*和?通配符,不支持正则表达式

此外,也许可以使用这里讨论的技术

这显示了如何使用trigram索引实现通用正则表达式搜索 它本身将用作三叉树索引。您将三叉树存储为关键字,然后 sphinx可以运行系统输出的布尔查询

(普通的斯芬克斯,其工作原理与“索引词搜索”部分的文档非常相似
技巧是使用sphinx作为索引Reg Ex搜索的后端)

您确实可以将正则表达式与sphinx一起使用

虽然不能在搜索时使用它们,但可以在构建索引时使用它们来标识应视为相同标记的一组单词/符号


您确实可以将正则表达式与Sphinx一起使用

虽然不能在搜索时使用它们,但可以在构建索引时使用它们来标识应视为相同标记的一组单词/符号


谢谢你的回答,但我需要的不是单词:“2x2”之间没有空格…@taofos:这是我的观点:Sphinx不支持你需要的功能,所以你需要一种不同的方法,比如一个实用工具来将正则表达式转换成Sphinx的扩展查询语言。现在我使用mongo和regexp=)慢多了,但这对我来说不是问题…谢谢你的回答,但我需要的不是文字:“2x2”没有空格…@taofos:这是我的观点:Sphinx不支持您需要的功能,所以您需要一种不同的方法,例如一个实用程序来将正则表达式转换为Sphinx的扩展查询语言。现在我使用mongo和regexp=)速度要慢得多,但这对我来说不是问题……公认的答案并不完全正确。虽然RegEx不能在搜索时使用,但它可以在构建索引时使用。请看我的答案。公认的答案并不完全正确。虽然RegEx不能在搜索时使用,但它可以在构建索引时使用。看我的答案,太好了!谢谢你的有益补充!伟大的谢谢你的有益补充!
$ search -p "2x4"
...
index 'xxx': query '2x4 ': returned 25 matches of 25 total in 0.000 sec
...
words:
1. '2x4': 25 documents, 25 hits


$ search -p "2(x|y)4"
...
index 'xxx': query '2(x|y)4 ': returned 0 matches of 0 total in 0.000 sec

words:
1. '2': 816 documents, 842 hits
2. 'x': 21 documents, 21 hits
3. 'y': 0 documents, 0 hits
4. '4': 2953 documents, 3014 hits
# index '13-inch' as '13inch'
regexp_filter = \b(\d+)\" => \1inch

# index 'blue' or 'red' as 'color'
regexp_filter = (blue|red) => color