mickdelaney
11/8/2013 - 5:32 PM

Multi-word query time synonyms in elasticsearch.

Multi-word query time synonyms in elasticsearch.

# delete old index if exists
curl -XDELETE 'http://localhost:9200/syns?pretty'

# create index with synonym analyzer and mapping
curl -XPUT 'http://localhost:9200/syns?pretty' -d '{
    "settings" : {
        "number_of_replicas": 0,
        "number_of_shards": 1,
        "index": {
            "analysis": {
                "analyzer": {
                    "synonym": {
                        "tokenizer": "standard",
                        "filter": ["standard", "lowercase", "stop", "synonym"]
                    }
                },
                "filter": {
                    "synonym": {
                        "type": "synonym",
                        "synonyms": [
                            "spider man => spiderman"
                        ]
                    }
                }
            }
        }
    },
    "mappings": {
        "test": {
            "properties": {
                "text": {"type": "string", "index_analyzer": "standard", "search_analyzer": "synonym"}
            }
        }
    }
}'

# index the test documents
curl -XPUT 'http://localhost:9200/syns/test/1?pretty' -d '{"text": "the adventures of spiderman"}'
curl -XPUT 'http://localhost:9200/syns/test/2?pretty' -d '{"text": "what hath man wrought?"}'
curl -XPUT 'http://localhost:9200/syns/test/3?pretty&refresh=true' -d '{"text": "spiders eat insects"}'


# working query, finds correct document #1
curl -XPOST 'http://localhost:9200/syns/test/_search?pretty' -d '{"query": {"match": {"text": "spider man"}}}'