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