我正在运行Zend_Search_Lucene,它几乎与普通的Lucene完全相同。我在我的Lucene索引中保留了商店,他们持有这个:
id of store for sql - 'store_id' of field type keyword
name of store - 'name' of field type text
latitude of store - 'lat' of field type keyword
longitude of store - 'lng' of field type keyword
我只有一个商店可以在数据库中测试。它的名字是“超级棒的商店”,索引为11,纬度为73.9,而lng为40.6。但是,结果并不像他们应该的那样。
以下是我的一个查询无效的示例:
(姓名:'awesom *')AND lat:[ - 74.486951 TO -73.486951] AND lng:[40.256054 TO 41.256054]
*应该代表“然后你想要的任何东西”,它不会返回商店。如果我将名称命名为“awesome *”,它将正确返回。我不知道如何让它搜索awesomatic / awesome / etc。
我的另一个问题是lat和lng搜索也不起作用。无论lat或lng的范围是多少,它们似乎都不重要。即使我输入了中国的lat / lng,只要名称匹配,它就会返回结果。我需要它只返回结果,如果lat和lng在它们的正确范围内。
我做错了什么?!请帮忙!
答案 0 :(得分:2)
请参阅this question有关Lucene的地理搜索的信息。我认为索引和搜索浮点值不起作用。尝试制作这些大的零填充整数。 例如
lat:[-74486951 TO -73486951]
这可能会对性能产生不利影响,因此请考虑使用较低的分辨率,或使用This question中的一些技术,这些技术讨论了在Java Lucene中索引经度和纬度数据(Zend Lucene有点落后于版本,所以尝试使用旧的东西。)