1import unittest 2from includes import * 3 4 5def testBasicPoneticCase(env): 6 env.assertOk(env.cmd('ft.create', 'idx', 'schema', 'text', 'TEXT', 'PHONETIC', 'dm:en', 'SORTABLE')) 7 env.assertOk(env.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 8 'text', 'morfix')) 9 10 env.assertEquals(env.cmd('ft.search', 'idx', 'morphix'), [1L, 'doc1', ['text', 'morfix']]) 11 env.assertEquals(env.cmd('ft.search', 'idx', '@text:morphix'), [1L, 'doc1', ['text', 'morfix']]) 12 env.assertEquals(env.cmd('ft.search', 'idx', '@text:morphix=>{$phonetic:true}'), [1L, 'doc1', ['text', 'morfix']]) 13 env.assertEquals(env.cmd('ft.search', 'idx', '@text:morphix=>{$phonetic:false}'), [0L]) 14 15def testBasicPoneticWrongDeclaration(env): 16 with env.assertResponseError(): 17 env.cmd('ft.create', 'idx', 'schema', 'text', 'TEXT', 'PHONETIC', 'something', 'SORTABLE') 18 with env.assertResponseError(): 19 env.cmd('ft.create', 'idx', 'schema', 'text', 'TEXT', 'PHONETIC', 'kk:tt', 'SORTABLE') 20 with env.assertResponseError(): 21 env.cmd('ft.create', 'idx', 'schema', 'text', 'TEXT', 'PHONETIC', 'dm:tt', 'SORTABLE') 22 with env.assertResponseError(): 23 env.cmd('ft.create', 'idx', 'schema', 'text', 'TEXT', 'PHONETIC', 'll:en', 'SORTABLE') 24 25def testPoneticOnNonePhoneticField(env): 26 env.assertOk(env.cmd('ft.create', 'idx', 'schema', 'text', 'TEXT', 'PHONETIC', 'dm:en', 'SORTABLE', 'text1', 'TEXT', 'SORTABLE')) 27 env.assertOk(env.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 28 'text', 'morfix', 29 'text1', 'phonetic')) 30 31 env.assertEquals(env.cmd('ft.search', 'idx', 'morphix'), [1L, 'doc1', ['text', 'morfix', 'text1', 'phonetic']]) 32 env.assertEquals(env.cmd('ft.search', 'idx', '@text:morphix'), [1L, 'doc1', ['text', 'morfix', 'text1', 'phonetic']]) 33 env.assertEquals(env.cmd('ft.search', 'idx', 'phonetic'), [1L, 'doc1', ['text', 'morfix', 'text1', 'phonetic']]) 34 env.assertEquals(env.cmd('ft.search', 'idx', 'fonetic'), [0L]) 35 env.assertEquals(env.cmd('ft.search', 'idx', '@text1:morphix'), [0L]) 36 with env.assertResponseError(): 37 env.cmd('ft.search', 'idx', '@text1:morphix=>{$phonetic:true}') 38 with env.assertResponseError(): 39 env.cmd('ft.search', 'idx', '@text1:morphix=>{$phonetic:false}') 40 41def testPoneticWithAggregation(env): 42 env.assertOk(env.cmd('ft.create', 'idx', 'schema', 'text', 'TEXT', 'PHONETIC', 'dm:en', 'SORTABLE', 'text1', 'TEXT', 'SORTABLE')) 43 env.assertOk(env.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 44 'text', 'morfix', 45 'text1', 'phonetic')) 46 47 env.assertEquals(env.cmd('ft.aggregate', 'idx', 'morphix', 'LOAD', 2, '@text', '@text1'), [1L, ['text', 'morfix', 'text1', 'phonetic']]) 48 env.assertEquals(env.cmd('ft.aggregate', 'idx', '@text:morphix', 'LOAD', 2, '@text', '@text1'), [1L, ['text', 'morfix', 'text1', 'phonetic']]) 49 env.assertEquals(env.cmd('ft.aggregate', 'idx', 'phonetic', 'LOAD', 2, '@text', '@text1'), [1L, ['text', 'morfix', 'text1', 'phonetic']]) 50 env.assertEquals(env.cmd('ft.aggregate', 'idx', '@text1:morphix', 'LOAD', 2, '@text', '@text1'), [0L]) 51 if not env.is_cluster(): 52 with env.assertResponseError(): 53 env.cmd('ft.aggregate', 'idx', '@text1:morphix=>{$phonetic:true}') 54 with env.assertResponseError(): 55 env.cmd('ft.aggregate', 'idx', '@text1:morphix=>{$phonetic:false}') 56 else: 57 raise unittest.SkipTest("FIXME: Aggregation error propagation broken on cluster mode") 58 59def testPoneticWithSchemaAlter(env): 60 env.assertOk(env.cmd('ft.create', 'idx', 'schema', 'text', 'TEXT', 'PHONETIC', 'dm:en', 'SORTABLE', 'text1', 'TEXT', 'SORTABLE')) 61 env.assertOk(env.cmd('ft.alter', 'idx', 'SCHEMA', 'ADD', 'text2', 'TEXT', 'PHONETIC', 'dm:en')) 62 63 env.assertOk(env.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 64 'text', 'morfix', 65 'text1', 'check', 66 'text2', 'phonetic')) 67 68 env.assertEquals(env.cmd('ft.search', 'idx', 'fonetic'), [1L, 'doc1', ['text', 'morfix', 'text1', 'check', 'text2', 'phonetic']]) 69 env.assertEquals(env.cmd('ft.search', 'idx', '@text2:fonetic'), [1L, 'doc1', ['text', 'morfix', 'text1', 'check', 'text2', 'phonetic']]) 70 env.assertEquals(env.cmd('ft.search', 'idx', '@text1:fonetic'), [0L]) 71 env.assertEquals(env.cmd('ft.search', 'idx', '@text2:fonetic=>{$phonetic:false}'), [0L]) 72 env.assertEquals(env.cmd('ft.search', 'idx', '@text2:fonetic=>{$phonetic:true}'), [1L, 'doc1', ['text', 'morfix', 'text1', 'check', 'text2', 'phonetic']]) 73 74def testPoneticWithSmallTerm(env): 75 env.assertOk(env.cmd('ft.create', 'complainants', 'SCHEMA', 'name', 'text', 'PHONETIC', 'dm:en', 'almamater', 'text', 'PHONETIC', 'dm:en')) 76 77 env.assertOk(env.cmd('ft.add', 'complainants', 'foo64', 1.0, 'FIELDS', 'name', 'jon smith', 'almamater', 'Trent')) 78 env.assertOk(env.cmd('ft.add', 'complainants', 'foo65', 1.0, 'FIELDS', 'name', 'john jones', 'almamater', 'Toronto')) 79 80 res = env.cmd('ft.search', 'complainants', '@name:(john=>{$phonetic:true})') 81 env.assertEqual(sorted(res), sorted([2L, 'foo64', ['name', 'jon smith', 'almamater', 'Trent'], 'foo65', ['name', 'john jones', 'almamater', 'Toronto']])) 82 83def testPoneticOnNumbers(env): 84 env.assertOk(env.cmd('ft.create', 'idx', 'SCHEMA', 'test', 'TEXT', 'PHONETIC', 'dm:en')) 85 env.assertOk(env.cmd('ft.add', 'idx', 'doc1', 1.0, 'FIELDS', 'test', 'this is 2015 test')) 86 env.assertOk(env.cmd('ft.add', 'idx', 'doc2', 1.0, 'FIELDS', 'test', 'this is 04 test')) 87 res = env.cmd('ft.search', 'idx', '04') 88 env.assertEqual(res, [1L, 'doc2', ['test', 'this is 04 test']]) 89 90def testIssue1313(env): 91 env.expect('FT.CREATE test SCHEMA topic2 TEXT NOINDEX topic TEXT PHONETIC dm:en').ok() 92 env.expect('FT.SEARCH', 'test', '@topic:(tmp)=>{$phonetic:true}').equal([0]) 93 94 env.expect('FT.CREATE test1 SCHEMA topic TEXT PHONETIC dm:en topic2 TEXT NOINDEX').ok() 95 env.expect('FT.SEARCH', 'test1', '@topic:(tmp)=>{$phonetic: true}').equal([0]) 96