8

私は最近、検索の世界を探求し始め、MongoDBのインデックスとしてESを使用しようとしています。私はそれらをうまく統合することができましたが、検索APIはかなり複雑で混乱していると思います。JavaAPIもあまり役に立ちません。完全一致を見つけることはできますが、全文検索を行うにはどうすればよいですか?これが私のコードです:

Settings settings = ImmutableSettings.settingsBuilder()
    .put("cluster.name", "elasticsearch").build();
Client client = new TransportClient(settings)
    .addTransportAddress(new InetSocketTransportAddress("host-ip", 9300));
SearchResponse response = client.prepareSearch("mongoindex")
    .setSearchType(SearchType.QUERY_AND_FETCH)
    .setQuery(termQuery("name", "*name*"))
    .setFrom(0).setSize(60).setExplain(true)
    .execute()
    .actionGet();

"name":"testname"を使用して見つけるのに問題はありません.setQuery(termQuery("name", "testname"))"name":"this is a test name"、上記の例では機能しません。私は何が間違っているのですか?

4

3 に答える 3

8

インターネットを何時間もクロールした後、javadocsの助けを借りて、なんとかそれを理解することができました。最も重要なのは、インターフェース*QueryBuilder*とその実装クラスです。以下の方法FieldQueryBuilderで示すクエリに使用しました。setQuery

SearchResponse response = client.prepareSearch("mongoindex")
    .setSearchType(SearchType.QUERY_AND_FETCH)
    .setQuery(fieldQuery("name", "test name"))
    .setFrom(0).setSize(60).setExplain(true)
    .execute()
    .actionGet();
SearchHit[] results = response.getHits().getHits();
for (SearchHit hit : results) {
  System.out.println(hit.getId());    //prints out the id of the document
  Map<String,Object> result = hit.getSource();   //the retrieved document
}

結果のMapオブジェクトを使用して、getメソッドを呼び出すだけで関連データを取得できます。

于 2013-01-14T08:26:42.543 に答える
0

ElasticsearchのtermQueryは、検索構文にLucenceを使用しているようです。Luceneのドキュメントによると、「*」ワイルドカードは検索の最初の用語として許可されていません。

于 2013-01-12T21:51:10.670 に答える
0

[ワイルドカードクエリ](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html)を確認することをお勧めします

于 2014-07-13T18:55:13.500 に答える