1

検索可能にしたい 4 つのデータがあります。

町、市、郵便番号、国

次のいずれかの方法でこれらの結果を検索可能にする最善の方法は何ですか?

  • ロンドン、イギリス
  • スウィンドン、ウィルトシャー、イングランド
  • イギリス、ウィルトシャー
  • イングランド
  • ウィルトシャー
  • スウィンドン

データを正規化することはできますが、誰かが単に「ロンドン」を検索すると、結果が重複してしまいます。

「London」だけではなく「London, England」だけを保存した場合、誰かが「London」を検索しても結果は見つかりません。

そのキャッチ22。ユーザーが検索するときに柔軟に対応できるようにするには、住所をどのように保存する必要がありますか?

4

3 に答える 3

0

利用可能な地理空間データがない場合は、Herarchical Facetingを試すことができます。特定の方法でデータにインデックスを付け、階層内でクエリを実行できるようにします。

Document: England > London > Chelsea

Index: 0/England, 1/England/London, 2 England/London/Chelsea

Query: facet.field = category, facet.prefix = 1/London, facet.mincount = 1

インデックスには多少の冗長性がありますが、ほとんどの場合、無視できる程度です。

于 2012-09-13T21:28:21.143 に答える
0

最善のアプローチは、solr の空間検索機能http://wiki.apache.org/solr/SpatialSearch/を使用することですが、その場合、位置の緯度/経度を返し、それをソルレコード。次に、検索で同じルックアップを実行して緯度/経度を取得すると、半径検索を実行して、場所のテキスト検索と比較してはるかに正確な結果を得ることができます。

于 2012-08-01T17:03:23.077 に答える
0

前の回答の提案に従うのが最善です。フィールドの場所を追加し、schema.xml を構成する必要があります

セクションに追加 <fieldType>

 <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>

セクションに追加<field>

<field name="location" type="location" indexed="true" stored="true" required="true" />

 <dynamicField name="*_coordinate"  type="tdouble" indexed="true"  stored="false"/> 

インデックスを更新する solr/dataimport?command=delta-import

クエリを作成できます &q= : &fq={!geofilt pt=45.15,-93.85 sfield=store d=5}

http://wiki.apache.org/solr/SpatialSearch http://wiki.apache.org/solr/SpatialSearchDev

于 2012-09-13T21:04:02.373 に答える