2017-10-15 6 views
0

Lors de la définition d'un analyseur personnalisé pour Azure Search, il est possible de définir un filtre de jeton à partir de la liste this. J'essaye de soutenir la recherche du préfixe et de l'infixe. Par exemple: si un champ contient le nom: 123 456, je veux les termes interrogeables pour contenir:Création d'un analyseur EdgeNGram prenant en charge les deux côtés dans Azure Search

1 
12 
123 
23 
3 
4 
45 
456 
56 
6 

Lorsque vous utilisez le EdgeNGramTokenFilterV2 qui semble faire l'affaire, il y a une possibilité de définir un « côté » propriété, mais seulement "avant" et "arrière" sont pris en charge, pas les deux. la valeur « avant » (par défaut) génère cette liste:

1 
12 
123 
4 
45 
456 

et retour génère:

123 
23 
3 
456 
56 
6 

J'ai essayé d'utiliser deux deux jetons EdgeNGramTokenFilterV2s, mais cela crée des termes de la combinaison des deux filtres tels que : « 2 » ou « 5 »:

1 
12 
123 
23 
3 
4 
45 
456 
56 
6 
2 // Unwanted 
5 // Unwanted 

J'ai aussi essayé d'utiliser un jeton « inverse », mais tout infirme et les résultats sont encore mal.

J'utilise un seul champ de recherche ("Nom") et je préférerais qu'il reste comme ceci. (Pensée de l'option d'utiliser un champ différent nommé "name_reverse" avec un analyseur différent, mais cela est très inefficace et causera beaucoup de maux de tête lors de la connexion du moteur de recherche à la source de données. est la demande en cours de création d'index:

{ 
"name": "testindexboth", 
"fields": [ 
    {"name": "id", "type": "Edm.String", "key": true }, 
    {"name": "Name", "type": "Edm.String", "searchable": true, "analyzer": "myAnalyzer"} 
], 
"myAnalyzer": [ 
    { 
    "name": "myAnalyzer", 
    "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer", 
    "tokenizer": "standard_v2", 
    "tokenFilters":["front_filter", "back_filter"] 
    }], 

    "tokenFilters":[ 
      { 
       "name":"front_filter", 
       "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
       "maxGram":15, 
       "side": "front" 
      }, 
         { 
       "name":"back_filter", 
       "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
       "maxGram":15, 
       "side": "back" 
      } 
     ] 
} 

y at-il une possibilité de combiner les deux, sans se les bousculent les résultats

Répondre

2

Ajouter deux champs à votre index, avec deux analyseurs personnalisés différents: l'un pour le préfixe Pour interroger, interrogez les deux champs:

+0

Ça va certainement marcher, mais ça ressemble un peu à un hack, tu ne penses pas? Cela m'oblige également à utiliser une fonction de mappage de champs. –