Моят lucene индекс има полета за географска ширина и дължина, индексирани както следва:
doc.Add(new Field("latitude", latitude.ToString() , Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.Add(new Field("longitude", longitude.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
Искам да извлека набор от документи от този индекс, чиито стойности за ширина и дължина са в даден диапазон.
Както вече знаете, Lat и Long могат да бъдат отрицателни стойности. Как правилно да съхранявам десетични числа със знак в Lucene? Споменатият по-долу подход ще даде ли правилни резултати или има някакъв друг начин да направите това?
Term lowerLatitude = new Term("latitude", bounds.South.ToString() );
Term upperLatitude = new Term("latitude", bounds.North.ToString());
RangeQuery latitudeRangeQuery = new RangeQuery(lowerLatitude, upperLatitude, true);
findLocationQuery.Add(latitudeRangeQuery, BooleanClause.Occur.SHOULD);
Term lowerLongitude = new Term("longitude", bounds.West.ToString());
Term upperLongitude = new Term("longitude", bounds.East.ToString());
RangeQuery longitudeRangeQuery = new RangeQuery(lowerLongitude, upperLongitude, true);
findLocationQuery.Add(longitudeRangeQuery, BooleanClause.Occur.SHOULD);
Освен това исках да знам как ConstantScoreRangeQuery на Lucene е по-добър от класа RangeQuery.
Изправен съм пред друг проблем в този контекст: имам един от документите в индекса със следните 3 града:
Лайънс, Илинойс
Оук Брук, Илинойс
Сан Франциско, Калифорния
Ако дам въвеждане като "Lyons, IL", тогава този запис се появява. Но ако дам Сан Франциско, Калифорния като вход, тогава не става.
Ако обаче съхраня градовете за този документ, както следва:
Сан Франциско, Калифорния
Лайънс, Илинойс
Оук Брук, Илинойс
и когато дам Сан Франциско, Калифорния като вход, тогава този запис се показва в резултатите от търсенето.
Това, което искам тук е, че ако напиша някой от 3-те града във входа, трябва да получа този документ в резултатите от търсенето.
Моля, помогнете ми да постигна това.
Благодаря.