2017-07-14 8 views
1

J'ai l'index salesperson qui a availableDateRange comme multivalue dateRangeField. ci-après le schéma pour availableDateRange champSolr 6 DateRangeField recherche correspondance exacte

<fields> 
    <field name="availableDateRange" type="daterange" indexed="true" stored="true" multiValued="true" required="false"/> 
</fields> 
<types> 
    <fieldtype name="daterange" class="solr.DateRangeField"/> 
</types> 

Si je cherche vendeur disponible à partir 15/07/2017 à 207-07-17 comme ci-dessous

avalableRange:"[2017-07-15 TO 2017-07-17]" 

En résultat de la recherche Je reçois 2 résultat comme ci-dessous:

availableRange: [ 
    "[2017-01-01T00:00:00Z TO 2017-07-15T00:00:00Z]", 
    "[2017-09-01T00:00:00Z TO 2017-12-31T00:00:00Z]" 
] 
availableRange: [ 
     "[2017-07-17T00:00:00Z TO 2017-07-19T00:00:00Z]" 
] 

recherche actuellement dateRange [15/07/2017 À 17/07/2017] me montre vendeur qui est même disponible tout d'un jour correspondant du 15 juillet au 17 juillet.

La requête en cours se comporte comme

availableRange:"2017-07-15" OR availableRange:"2017-07-16" OR availableRange:"2017-07-17" 

Ma question est: Comment puis-je obtenir tous les vendeurs qui sont disponibles sur tous les jours de la gamme recherchée (par exemple tous les jours de plage de date mentionnée 15 , 16,17 juillet)

requête doit comporter quelque chose comme:

availableRange:"2017-07-15" AND availableRange:"2017-07-16" AND availableRange:"2017-07-17" 

Mais l'utilisation et n'est pas possible solution, pour les grandes plages de dates (par exemple. 2017-01-01 AU 2017-12-31)

Quelqu'un peut-il m'aider s'il vous plaît pour trouver une solution réalisable et efficace.

Répondre

1

Vous devez utiliser field analyseur de requête pour préciser la fonction (op) pour traiter avec le champ de gamme comme champ de gamme (analyseur de requête standard considérer DateRangeField en remplacement de drop-in TrieDateField).

il peut être spécifié en tant que requête de filtre fq={!field f=availableRange op=Contains}[2017-07-15 TO 2017-07-17] (ou en utilisant _query_ pseudo-champ) où op peut être Contains, Intersects, Within.

Le comportement par défaut est Intersects, pour votre cas particulier Contains semble s'adapter.

+0

Merci, semble fonctionner. En référence à https://cwiki.apache.org/confluence/display/solr/Working+with+Dates Il existe 3 prédicats rationnels (c'est-à-dire Intersects (par défaut), Contient, Within). Pour plus de connaissances pouvez-vous s'il vous plaît me dire comment puis-je utiliser d'autres 2 prédicats rationnels (c'est-à-dire Intersects (par défaut), Within) –