В моем индексе 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 которых находятся в заданном диапазоне.
Как вы уже знаете, 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);
Кроме того, я хотел узнать, чем Lucene ConstantScoreRangeQuery лучше, чем класс RangeQuery.
В этом контексте я столкнулся с другой проблемой: у меня есть один из документов в индексе со следующими тремя городами:
Лион, Иллинойс
Дуб Брук, штат Иллинойс
Сан-Франциско, Калифорния
Если я введу «Лион, Иллинойс», то появится эта запись. Но если я введу Сан-Франциско, Калифорния, то это не так.
Однако, если я сохраню города для этого документа следующим образом:
Сан-Франциско, Калифорния
Лион, Иллинойс
Дуб Брук, штат Иллинойс
и когда я вводю Сан-Франциско, Калифорния, эта запись отображается в результатах поиска.
Я хочу, чтобы при вводе любого из трех городов я получил этот документ в результатах поиска.
Пожалуйста, помогите мне добиться этого.
Спасибо.