Это нецелесообразно, но кто я такой, чтобы сказать, что вы не можете этого сделать. У вас может быть веская причина для воспроизведения звука.
Если вы используете Audio Sessions, включите
в начале вашего файла, а
[[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryPlayback
error: nil];
должны выполнить трюк. Обратите внимание, что если вы воспроизводите музыку или звуки, воспроизведение iPod будет приостановлено.
Как только это было сделано, возможно, где-то в инициализации одного из ваших классов, который воспроизводит звуки, вы можете создавать такие звуки:
// probably an instance variable: AVAudioPlayer *player;
NSString *path = [[NSBundle mainBundle] pathForResource...];
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url];
Когда это будет сделано, вы можете играть с ним в любое время, когда хотите:
[player play]; // Play the sound
[player pause]; // Pause the sound halfway through playing
player.currentTime += 10 // skip forward 10 seconds
player.duration // Get the duration
И другие приятные вещи. Посмотрите ссылку на AVAudioPlayer .
Необходимо учитывать две вещи:
Это, в частности, означает, что ваш запрос "Lychee" будет проанализирован на что-то вроде "L Ly Lyc Lych Lyche Lychee" (из-за фильтра ngram ребра). Строка "Apache Strawberry Club Large" была предварительно проанализирована, а термин "Large" был расширен до "L La Lar Larg Large" из-за фильтра граничной диаграммы. Таким образом, запрос «Lychee» будет соответствовать «Apache Strawberry Club Large», просто потому, что они оба содержат слово, начинающееся с L ...
1113 Это явно нежелательное поведение.
Первым шагом было бы изменение способа анализа вашего запроса, чтобы в конечном итоге вы не совпали с совершенно не связанными документами. По сути, вам нужно определить другой анализатор, который почти идентичен, но не имеет фильтра "edge ngram". Затем вам нужно будет указать Hibernate Search использовать этот анализатор для анализа вашего запроса.
См. этот ответ для подробного объяснения.
В качестве второго шага вам нужно привести в соответствие ваш запрос, если все включенные термины присутствуют в документе. Для этого самым простым решением было бы использование простого запроса строки запроса вместо запроса по ключевому слову.
Заменить это:
Query lucenQuery = qb.keyword().onField("name").matching(searchTerm).createQuery();
На это:
Query lucenQuery = qb.simpleQueryString().onField("name").withAndAsDefaultOperator().matching(searchTerm).createQuery();
Ключом является вызов .withAndAsDefaultOperator()
.
Это изменение будет иметь несколько других эффектов, таких как включение специального синтаксиса во входной строке, поэтому я рекомендую вам прочитать справочную документацию, чтобы точно знать, что такое simpleQueryString
.
Я заставил это работать благодаря этому, благодаря @yrodiere
@Indexed
@Table (name = "shop_table")
@Entity
@AnalyzerDef(name = "edgeNgram",
tokenizer = @TokenizerDef(factory = WhitespaceTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = EdgeNGramFilterFactory.class, params =
{ @Parameter(name = "maxGramSize", value = "1024") }),
})
@AnalyzerDef(name = "search_query_analyzer",
tokenizer = @TokenizerDef(factory = WhitespaceTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
@TokenFilterDef(factory = LowerCaseFilterFactory.class)
})
public class Shop implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Field(store = Store.YES, analyze = Analyze.YES)
@Column(name = "name")
@Analyzer(definition = "edgeNgram")
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
и моему запросу
QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Shop.class)
.overridesForField("name", "search_query_analyzer").get();
Query lucenQuery = qb.simpleQueryString().onField("name").withAndAsDefaultOperator().matching(shopSearchTerm).createQuery();
Но я не уверен, реализую ли я это при правильном подходе .. [114 ]