フレーズ検索と近接検索
`match_phrase`と`slop`パラメーターを使い、完全なフレーズや一定の近接範囲にある単語を検索する方法を学びます。
「フレーズ検索と近接検索」はCoddyKit上の無料Elasticsearch & Full Text Search Systemsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはElasticsearch & Full Text Search Systems学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Elasticsearch & Full Text Search Systemsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Beyond Single Words
Welcome! So far, you've learned to search for individual words. But what if you need to find exact phrases like "quick brown fox" or words that appear close together?
This lesson introduces phrase and proximity searches, powerful techniques to make your searches more precise and relevant.
Finding Exact Phrases
Sometimes, the order of words matters. For example, "New York" is different from "York New". To find an exact sequence of words, we use a phrase query.
In Elasticsearch, the match_phrase query is perfect for this. It looks for all terms in your query string, in the exact order, and next to each other.
match_phrase Example
Let's see match_phrase in action. We'll simulate indexing a few documents and then search for the exact phrase "quick brown fox".
public class Main {
public static void main(String[] args) {
System.out.println("Simulating search for exact phrase 'quick brown fox'");
System.out.println("on documents:");
System.out.println("- 'The quick brown fox jumps.'");
System.out.println("- 'A fox brown quick jumps.'");
System.out.println("- 'Quick brown fox is fast.'");
System.out.println("
--- Elasticsearch Query (simulated) ---");
System.out.println("{");
System.out.println(" \"query\": {");
System.out.println(" \"match_phrase\": {");
System.out.println(" \"text_field\": \"quick brown fox\"");
System.out.println(" }");
System.out.println(" }");
System.out.println("}");
System.out.println("
--- Search Results (simulated) ---");
System.out.println("Document: 'The quick brown fox jumps.' (MATCH!)");
System.out.println("Document: 'Quick brown fox is fast.' (MATCH!)");
System.out.println("No match for 'A fox brown quick jumps.'");
}
}Phrase Matching Logic
The match_phrase query requires two conditions:
- All terms present: Every word in your phrase ("quick", "brown", "fox") must exist in the document.
- Exact order: The words must appear in the same sequence.
- Contiguous: By default, the words must be right next to each other.
If any of these conditions aren't met, the document won't be considered a match.
Proximity Search with slop
What if you want to find words that are *close* to each other, but not necessarily an exact, contiguous phrase? This is where proximity search comes in.
Elasticsearch introduces the slop parameter for match_phrase queries. It allows for a certain number of "slops" or "gaps" between the words in your phrase.
Understanding slop
The slop parameter defines the maximum number of positions tokens can be "moved" to match the phrase.
slop: 0(default) means words must be contiguous.slop: 1allows one word to be skipped or reordered slightly.- Higher
slopvalues allow more flexibility in word order and distance.
Think of it as how many "moves" it takes to transform the document's words into your target phrase.
slop=1 Demonstration
Let's modify our previous search. We'll look for "quick fox" but allow for one word in between using "slop": 1.
public class Main {
public static void main(String[] args) {
System.out.println("Simulating search for 'quick fox' with slop: 1");
System.out.println("on documents:");
System.out.println("- 'The quick brown fox jumps.'");
System.out.println("- 'A quick sly fox is here.'");
System.out.println("- 'The quick fox is fast.'");
System.out.println("
--- Elasticsearch Query (simulated) ---");
System.out.println("{");
System.out.println(" \"query\": {");
System.out.println(" \"match_phrase\": {");
System.out.println(" \"text_field\": {");
System.out.println(" \"query\": \"quick fox\",");
System.out.println(" \"slop\": 1");
System.out.println(" }");
System.out.println(" }");
System.out.println(" }");
System.out.println("}");
System.out.println("
--- Search Results (simulated) ---");
System.out.println("Document: 'The quick brown fox jumps.' (MATCH!)");
System.out.println("Document: 'A quick sly fox is here.' (MATCH!)");
System.out.println("Document: 'The quick fox is fast.' (MATCH!)");
}
}slop and Word Order
slop can also help match phrases where words are slightly reordered. For example, to match "brown quick" when searching for "quick brown" with slop: 1.
It measures the minimum number of moves to get the document's tokens into the query's token order. Each move counts as 1 slop unit.
public class Main {
public static void main(String[] args) {
System.out.println("Simulating search for 'quick brown' with slop: 1");
System.out.println("on document:");
System.out.println("- 'The brown quick fox.'"); // 'brown' and 'quick' are swapped
System.out.println("
--- Elasticsearch Query (simulated) ---");
System.out.println("{");
System.out.println(" \"query\": {");
System.out.println(" \"match_phrase\": {");
System.out.println(" \"text_field\": {");
System.out.println(" \"query\": \"quick brown\",");
System.out.println(" \"slop\": 1");
System.out.println(" }");
System.out.println(" }");
System.out.println(" }");
System.out.println("}");
System.out.println("
--- Search Results (simulated) ---");
System.out.println("Document: 'The brown quick fox.' (MATCH!)");
System.out.println("Explanation: To change 'brown quick' to 'quick brown', one move is needed (slop 1).");
}
}match_phrase vs. match
It's important to differentiate match_phrase from the basic match query you've seen before.
matchquery: Finds documents containing *any* of the words, regardless of order or proximity. It's good for general relevancy.match_phrasequery: Requires *all* words in the exact order and, by default, contiguous. Withslop, it allows for controlled proximity. It's for high precision.
Choose match_phrase when the order and closeness of words are critical to your search.
Proximity Check
You want to find documents where "apple" and "pie" appear, with at most one word in between them, in that specific order.
Recap: Precise Searches
Great job! You've learned how to enhance your search precision:
match_phrase: For finding exact sequences of words.slopparameter: To control the allowed distance and reordering between words in a phrase.
These techniques are crucial for building highly accurate and user-friendly search experiences. Keep practicing to master them!
よくある質問
「フレーズ検索と近接検索」レッスンは無料ですか?
はい。「フレーズ検索と近接検索」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Elasticsearch & Full Text Search Systemsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Elasticsearch & Full Text Search Systemsコースには全4レッスンが含まれています。
「フレーズ検索と近接検索」で何を学びますか?
`match_phrase`と`slop`パラメーターを使い、完全なフレーズや一定の近接範囲にある単語を検索する方法を学びます。 ブラウザで直接実行するハンズオンコードでElasticsearch & Full Text Search Systemsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Elasticsearch & Full Text Search Systemsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのElasticsearch & Full Text Search Systemsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「フレーズ検索と近接検索」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このElasticsearch & Full Text Search Systemsレッスンでコードを書いて実行できますか?
はい。すべてのElasticsearch & Full Text Search Systemsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- フレーズ検索と近接検索
- あいまい検索とワイルドカードクエリ
- 検索結果のハイライト
- ファセット検索のための集約