2017-09-01 40 views
0

美好的一天。Couchbase全文搜索搭配部分号码

我正在使用couchDB来存储包含“firstName”,“lastName”,“dob”和“idNumber”的某个实体的数据。 (其他各种动态数据也存在,但现在并不重要)。

我创建了全文搜索索引来索引特定类型的文档,并设置为只在上述字段中进行搜索。该搜索对于“firstName”和“lastName”也完全适用于部分匹配。

但是,对于idNumber,必须给出确切的数字。部分搜索idNumber不起作用。例如,如果'89'是idNumber,并且我搜索'760505432',则不返回任何内容。如果我完全输入idNumber,它会成功返回。我已经弄清楚了FTS部分的属性,但没有用。

我的出生日期字段根本不起作用。我无法在该字段上搜索,但我已经停止了该操作,直到我至少获得idNumber才能工作。

JSON的描述如下过滤器(遗憾的大小):

{ 
    "type": "fulltext-index", 
    "name": "entities_fts", 
    "uuid": "5c5dc5e32083535f", 
    "sourceType": "couchbase", 
    "sourceName": "entities", 
    "sourceUUID": "04bb2840ed12d26003797737e5a19908", 
    "planParams": { 
    "maxPartitionsPerPIndex": 32, 
    "numReplicas": 0, 
    "hierarchyRules": null, 
    "nodePlanParams": null, 
    "pindexWeights": null, 
    "planFrozen": false 
    }, 
    "params": { 
    "mapping": { 
     "byte_array_converter": "json", 
     "default_analyzer": "standard", 
     "default_datetime_parser": "dateTimeOptional", 
     "default_field": "_all", 
     "default_mapping": { 
     "display_order": "1", 
     "dynamic": true, 
     "enabled": false 
     }, 
     "default_type": "_default", 
     "index_dynamic": true, 
     "store_dynamic": false, 
     "type_field": "header.type", 
     "types": { 
     "person": { 
      "display_order": "0", 
      "dynamic": false, 
      "enabled": true, 
      "properties": { 
      "basic": { 
       "display_order": "1", 
       "dynamic": false, 
       "enabled": true, 
       "properties": { 
       "dob": { 
        "dynamic": false, 
        "enabled": true, 
        "fields": [ 
        { 
         "analyzer": "", 
         "display_order": "0", 
         "include_in_all": true, 
         "include_term_vectors": true, 
         "index": true, 
         "name": "", 
         "store": false, 
         "type": "datetime" 
        } 
        ] 
       }, 
       "firstNames": { 
        "dynamic": false, 
        "enabled": true, 
        "fields": [ 
        { 
         "analyzer": "", 
         "display_order": "2", 
         "include_in_all": true, 
         "include_term_vectors": true, 
         "index": true, 
         "name": "", 
         "store": false, 
         "type": "text" 
        } 
        ] 
       }, 
       "lastNames": { 
        "dynamic": false, 
        "enabled": true, 
        "fields": [ 
        { 
         "analyzer": "", 
         "display_order": "1", 
         "include_in_all": true, 
         "include_term_vectors": false, 
         "index": true, 
         "name": "", 
         "store": false, 
         "type": "text" 
        } 
        ] 
       } 
       } 
      }, 
      "extended": { 
       "display_order": "0", 
       "dynamic": false, 
       "enabled": true, 
       "properties": { 
       "idNumber": { 
        "dynamic": false, 
        "enabled": true, 
        "fields": [ 
        { 
         "analyzer": "keyword", 
         "display_order": "0", 
         "include_in_all": true, 
         "include_term_vectors": false, 
         "index": true, 
         "name": "", 
         "store": false, 
         "type": "text" 
        } 
        ] 
       } 
       } 
      } 
      } 
     } 
     } 
    }, 
    "store": { 
     "kvStoreName": "forestdb" 
    } 
    }, 
    "sourceParams": { 
    "clusterManagerBackoffFactor": 0, 
    "clusterManagerSleepInitMS": 0, 
    "clusterManagerSleepMaxMS": 2000, 
    "dataManagerBackoffFactor": 0, 
    "dataManagerSleepInitMS": 0, 
    "dataManagerSleepMaxMS": 2000, 
    "feedBufferAckThreshold": 0, 
    "feedBufferSizeBytes": 0 
    } 
} 

任何帮助,将不胜感激,谢谢。

回答

1

为couchbase FTS IDNumber搜索,这可能是因为你正在尝试一个完全匹配搜索?你可能会想尝试一个前缀搜索...

{ 
     "from": 0, 
     "size": 10, 
     "query": { 
      "field": "name", 
      "prefix": "bobble" 
     } 
    } 

https://github.com/blevesearch/bleve/blob/master/test/tests/basic/searches.json#L91

+0

你被点上。我改为ConjunctionQuery,其中每个合并都是带有标记化搜索术语的PrefixQuery。现在,诸如“Pet Smi”之类的搜索会返回“Peter Smith”。很好,谢谢。 –